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

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

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

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


当前回答

(这是我如何写一个可复制的例子的建议。我试图让它简短而甜蜜)。

如何编写可复制的示例

如果你提供了一个可重复的例子,你最有可能在R问题上得到很好的帮助。一个可复制的示例允许其他人通过复制和粘贴R代码来重新创建您的问题。

为了使示例具有可复制性,您需要包括四个方面:所需的包、数据、代码和R环境的描述。

包应该在脚本的顶部加载,因此很容易看看示例需要哪些。在电子邮件或堆栈溢出问题中包含数据的最简单方法是使用dput()生成R代码以重新创建它。例如,要在R中重新创建mtcars数据集,我将执行以下步骤:在R中运行dput(mtcars)复制输出在我的可复制脚本中,键入mtcars<-然后粘贴。花一点时间确保您的代码易于其他人使用内容如下:确保使用了空格,变量名称简洁,但是提供有用信息的使用注释指出问题所在尽最大努力删除与问题无关的所有内容。代码越短,越容易理解。在代码的注释中包含sessionInfo()的输出。这总结了您的R环境,并使其易于检查您是否使用了过时的包裹

您可以通过启动一个新的R会话并粘贴脚本来检查是否确实制作了一个可复制的示例。

在将所有代码放入电子邮件之前,请考虑将其放在Gistgithub上。它会给你的代码提供很好的语法高亮显示,你不必担心任何东西会被电子邮件系统破坏。

其他回答

除了我发现非常有趣的上述所有答案之外,有时也很容易,正如这里所讨论的:如何制作一个最小的可重复示例来获得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数据集如果您有自己的数据集,请将其包含在dput中,这样其他人可以更轻松地帮助您除非确有必要,否则不要使用install.package(),人们会理解您是否只使用require或library尽量简明扼要,有一些数据集尽量简单地描述您需要的输出问问题之前自己做上传图片很容易,所以如果你有还包括您可能遇到的任何错误

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

这是一个很好的指南。

最重要的一点是:制作一小段代码,我们可以运行它来了解问题所在。一个有用的函数是dput(),但是如果您有非常大的数据,那么您可能需要制作一个小样本数据集,或者只使用前10行左右。

编辑:

此外,确保您确定了问题所在。示例不应该是一个完整的R脚本,其中包含“在第200行出现错误”。如果您使用R(我爱浏览器())和Google中的调试工具,那么您应该能够真正确定问题所在,并重现一个同样错误的小例子。

从R.2.14开始(我猜),您可以将数据文本表示直接输入read.table:

 df <- read.table(header=TRUE, 
  text="Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
") 

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

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

灵感来自Henrik。