0

我试图dput()用一个大型数据库创建一个可重现的示例。数据库需要很大,因为可重现的示例涉及移动平均线。我发现这样做的方式涉及函数reproduce,在此处共享如何制作一个出色的 R 可重现示例?通过@Ricardo Saporta。reproduce基于dput()(此处的代码https://github.com/rsaporta/pubR/blob/gitbranch/reproduce.R)。

library(data.table) 
library(devtools)
source_url("https://raw.github.com/rsaporta/pubR/gitbranch/reproduce.R")

data <- read.table("http://pastebin.com/raw/xP1Zd0sC")
setDF(data)
reproduce(data, rows = c(1:100))

该代码创建data数据框,然后为其提供dput()输出。它使用rows参数输出完整的数据帧。然而,如果我使用这样的输出来重新创建数据框,它就会失败。

尝试将dput()输出分配给新的数据帧会导致代码不完整,需要我在最后手动添加三个括号。这样做之后,我收到以下错误消息:“视图错误:参数暗示不同的行数:100、61”。

请不要认为没有参数的dput()输出可以正常工作。它只是不输出完整的数据帧,而是输出它的一个样本。reproducerows = c(1:100)

#This works fine
reproduce(data)

另请注意,我使用 pastebin 方法创建了这个可重现的示例。该方法不能代替dput()我的目的,因为每当尝试导入某些列在单词之间有空格的数据时(例如带有日期时间戳的数据框),它都会失败。

编辑:经过进一步的故障排除后,当参数与包含4 列或更多列的数据框一起使用时,发现reproduce如上所述失败。将不得不寻找替代方案。rows

如果有人有兴趣对此进行测试,请使用以下链接运行上面的代码,所有链接都包含不同数量的列:

1)100x5:http ://pastebin.com/raw/xP1Zd0sC

2)100x4:http ://pastebin.com/raw/YZtetfne

3)100x4:http ://pastebin.com/raw/63Ap2bh5

4)100x3:http ://pastebin.com/raw/1vMMcMtx

5)100x3:http ://pastebin.com/raw/ziM1bYQt

6)100x1:http://pastebin.com/raw/qxtQs5u4

4

1 回答 1

2

如果您只是尝试dput()数据集的前 100 行,那么您可以在运行之前简单地对数据进行子集化dput()。似乎不需要使用链接功能。

dput(droplevels(head(data, 100)))  ## or dput(droplevels(data[1:100,]))

应该这样做。

然而,奇怪的是你的试穿reproduce()没有奏效。我会为此在 github 页面上提出问题。你可能会在那里得到更有建设性的答案。

感谢@David Arenburg 提醒我关于droplevels(). 如果我们有因子列,这对这个操作很有用。“剩余”级别将被删除。

于 2016-05-01T19:26:49.277 回答