在与同事讨论绩效、教学、发送错误报告或搜索邮件列表和Stack Overflow上的指导时,经常会询问一个可重复的示例,并且总是很有用。

你有什么建议来创建一个优秀的例子?如何以文本格式粘贴r中的数据结构?您还应包括哪些其他信息?

除了使用dput()、dump()或structure()之外,还有其他技巧吗?什么时候应该包含library()或require()语句?除了c、df、data等之外,应该避免哪些保留字。?

如何做出一个伟大的、可重复的例子?


当前回答

您可以使用reprex执行此操作。

正如mt1022所指出的,“……生产最小、可重复示例的好包装是tidyverse的“reprex”。”。

根据Tidyverse的说法:

“reprex”的目标是以这样一种方式打包您的问题代码,使其他人可以运行它并感受到您的痛苦。

tidyverse网站上给出了一个示例。

library(reprex)
y <- 1:4
mean(y)
reprex() 

我认为这是创建可复制示例的最简单方法。

其他回答

您可以使用reprex执行此操作。

正如mt1022所指出的,“……生产最小、可重复示例的好包装是tidyverse的“reprex”。”。

根据Tidyverse的说法:

“reprex”的目标是以这样一种方式打包您的问题代码,使其他人可以运行它并感受到您的痛苦。

tidyverse网站上给出了一个示例。

library(reprex)
y <- 1:4
mean(y)
reprex() 

我认为这是创建可复制示例的最简单方法。

以下是我的一些建议:

尝试使用默认的R数据集如果您有自己的数据集,请将其包含在dput中,这样其他人可以更轻松地帮助您除非确有必要,否则不要使用install.package(),人们会理解您是否只使用require或library尽量简明扼要,有一些数据集尽量简单地描述您需要的输出问问题之前自己做上传图片很容易,所以如果你有还包括您可能遇到的任何错误

所有这些都是可复制示例的一部分。

除了我发现非常有趣的上述所有答案之外,有时也很容易,正如这里所讨论的:如何制作一个最小的可重复示例来获得R的帮助

有许多方法可以创建随机向量创建一个100个数字的向量,其中R中的随机值舍入为2个小数或R中的一个随机矩阵:

mydf1<- matrix(rnorm(20),nrow=20,ncol=5)

请注意,由于维度等各种原因,有时很难共享给定的数据。然而,上述所有答案都很好,在想要制作可复制的数据示例时,思考和使用这些答案非常重要。但请注意,为了使数据与原始数据一样具有代表性(以防OP无法共享原始数据),最好在数据示例中添加一些信息(如果我们将数据称为mydf1)

class(mydf1)
# this shows the type of the data you have
dim(mydf1)
# this shows the dimension of your data

此外,应该知道可以是数据结构的数据的类型、长度和属性

#found based on the following
typeof(mydf1), what it is.
length(mydf1), how many elements it contains.
attributes(mydf1), additional arbitrary metadata.

#If you cannot share your original data, you can str it and give an idea about the structure of your data
head(str(mydf1))

R-help邮件列表有一个发布指南,包括提问和回答问题,包括生成数据的示例:

示例:有时提供一个小例子实际上可以运行。例如:如果我有如下矩阵x:

  > x <- matrix(1:8, nrow=4, ncol=2,
                dimnames=list(c("A","B","C","D"), c("x","y"))
  > x
    x y
  A 1 5
  B 2 6
  C 3 7
  D 4 8
  >

如何将其转换为数据帧具有8行和3列“row”、“col”和“value”,它们具有维度名称为“row”和“col”的值,如下所示:

  > x.df
     row col value
  1    A   x      1

...(答案可能是:

  > x.df <- reshape(data.frame(row=rownames(x), x), direction="long",
                    varying=list(colnames(x)), times=colnames(x),
                    v.names="value", timevar="col", idvar="row")

)

“小”这个词特别重要。您应该以最小的可重复示例为目标,这意味着数据和代码应该尽可能简单地解释问题。

编辑:漂亮的代码比难看的代码更容易阅读。使用样式指南。

如果您有一个大数据集,无法使用dput()轻松放入脚本,请将数据发布到pastebin并使用read.table加载它们:

d <- read.table("http://pastebin.com/raw.php?i=m1ZJuKLH")

灵感来自Henrik。