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

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

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

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


当前回答

通常,您需要一些数据作为示例,但是,您不想发布确切的数据。要在已建立的库中使用一些现有的data.frame,请使用data命令导入它。

例如。,

data(mtcars)

然后解决问题

names(mtcars)
your problem demostrated on the mtcars data set

其他回答

这是一个很好的指南。

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

编辑:

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

最初的帖子指的是现已退役的数据营的小提琴演奏服务。它已被重新命名为数据营灯,不能像我的回答所示的那样容易嵌入。

我想知道http://old.r-fiddle.org/链接可能是分享问题的一种非常简单的方式。它接收一个唯一的ID,比如,甚至可以考虑将其嵌入SO中。

有时,无论你如何努力,问题真的无法用较小的数据块再现,而且合成数据也不会发生(尽管展示你是如何生成没有再现问题的合成数据集是有用的,因为它排除了一些假设)。

可能需要将数据发布到web某处并提供URL。如果数据不能向公众公开,但可以共享,那么您可以通过电子邮件将其发送给感兴趣的各方(尽管这将减少需要处理的人数)。我实际上还没有看到这样做,因为无法发布数据的人对以任何形式发布数据都很敏感,但在某些情况下,如果数据在某种程度上被充分匿名/加扰/轻微损坏,人们仍然可以发布数据。

如果你不能做到这两个,那么你可能需要聘请一位顾问来解决你的问题。。。

编辑:匿名/加扰的两个有用SO问题:

如何从私有数据创建示例数据集(用无信息的占位符替换变量名称和级别)?给定一组从连续单变量分布中抽取的随机数,找到分布

通常,您需要一些数据作为示例,但是,您不想发布确切的数据。要在已建立的库中使用一些现有的data.frame,请使用data命令导入它。

例如。,

data(mtcars)

然后解决问题

names(mtcars)
your problem demostrated on the mtcars data set

使用testthat包中的函数来显示预期发生的情况是一个好主意。因此,其他人可以更改您的代码,直到它运行无误。这减轻了那些想帮助你的人的负担,因为这意味着他们不必解码你的文本描述。例如

library(testthat)
# code defining x and y
if (y >= 10) {
    expect_equal(x, 1.23)
} else {
    expect_equal(x, 3.21)
}

这比“我认为如果y等于或超过10,x将为1.23,否则为3.21,但我都没有得到结果”更清楚。即使在这个愚蠢的例子中,我认为代码比单词更清楚。使用testthat可以让你的助手专注于代码,这节省了时间,并且可以让他们在发布问题之前知道他们已经解决了你的问题