为了账号安全,请及时绑定邮箱和手机立即绑定

如何制作一个很好的R可重复的例子

如何制作一个很好的R可重复的例子

白衣染霜花 2019-05-20 13:30:58
在与同事讨论性能,教学,发送错误报告或在邮件列表上搜索指导时,以及在Stack Overflow上,通常会询问可重复的示例并始终提供帮助。您有什么建议创建优秀示例的提示?如何以文本格式粘贴r中的数据结构?您还应该包含哪些其他信息?在另外还有其他招数来使用dput(),dump()或structure()?你什么时候应该包括library()或require()声明?其中保留字应避免一个,此外c,df,data等?怎样才能成为一位伟大的[R重复的例子?
查看完整描述

8 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

如何编写可重现的示例。

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

为了使您的示例可重现,您需要包含四件事:所需的包,数据,代码和R环境的描述。

  • 应该在脚本的顶部加载,因此很容易看到示例需要哪些包。

  • 在电子邮件或Stack Overflow问题中包含数据的最简单方法是使用dput()生成R代码来重新创建它。例如,要mtcars在R中重新创建数据集,我将执行以下步骤:

    1. dput(mtcars)在R中运行

    2. 复制输出

    3. 在我可重现的脚本中,键入mtcars <-然后粘贴。

  • 花一点时间确保您的代码易于其他人阅读:

    • 确保你已经使用了空格,你的变量名称简洁,但信息丰富

    • 使用注释来指出问题所在

    • 尽力删除与问题无关的所有内容。
      代码越短,理解起来就越容易。

  • sessionInfo()在代码中包含注释的输出。这总结了您的R环境,并且可以轻松检查您是否使用了过时的软件包。

你可以通过启动一个新的R会话并粘贴你的脚本来检查你是否真的做了一个可重现的例子。

在将所有代码放入电子邮件之前,请考虑将其放在Gist github上。它将为您的代码提供良好的语法突出显示,您不必担心电子邮件系统会破坏任何内容。


查看完整回答
反对 回复 2019-05-20
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

就个人而言,我更喜欢“一个”衬里。一些事情:


my.df <- data.frame(col1 = sample(c(1,2), 10, replace = TRUE),

        col2 = as.factor(sample(10)), col3 = letters[1:10],

        col4 = sample(c(TRUE, FALSE), 10, replace = TRUE))

my.list <- list(list1 = my.df, list2 = my.df[3], list3 = letters)

数据结构应该模仿作者的问题而不是确切的逐字结构。当变量不覆盖我自己的变量或上帝禁止,函数(如df)时,我真的很感激。


或者,可以剪切几个角并指向预先存在的数据集,例如:


library(vegan)

data(varespec)

ord <- metaMDS(varespec)

不要忘记提及您可能正在使用的任何特殊包装。


如果你想在更大的物体上展示一些东西,你可以试试


my.df2 <- data.frame(a = sample(10e6), b = sample(letters, 10e6, replace = TRUE))

如果您通过raster包处理空间数据,则可以生成一些随机数据。在包装插图中可以找到很多例子,但这里有一个小金块。


library(raster)

r1 <- r2 <- r3 <- raster(nrow=10, ncol=10)

values(r1) <- runif(ncell(r1))

values(r2) <- runif(ncell(r2))

values(r3) <- runif(ncell(r3))

s <- stack(r1, r2, r3)

如果您需要实现的某些空间对象sp,则可以通过“空间”包中的外部文件(如ESRI shapefile)获取一些数据集(请参阅任务视图中的空间视图)。


library(rgdal)

ogrDrivers()

dsn <- system.file("vectors", package = "rgdal")[1]

ogrListLayers(dsn)

ogrInfo(dsn=dsn, layer="cities")

cities <- readOGR(dsn=dsn, layer="cities")


查看完整回答
反对 回复 2019-05-20
?
ibeautiful

TA贡献1993条经验 获得超5个赞

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行的数据框,以及名为“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")

小字这个词特别重要。您应该瞄准一个可重复性最小的示例,这意味着数据和代码应尽可能简单地解释问题。


查看完整回答
反对 回复 2019-05-20
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

从R.2.14(我猜)你可以直接将数据文本表示提供给read.table:


df <- read.table(header=T, 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

") 


查看完整回答
反对 回复 2019-05-20
  • 8 回答
  • 0 关注
  • 829 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信