0

所以我有一个朋友帮我写了一些 R 代码,我很难问,因为代码可以工作,但我很难理解和更改它,我觉得它不是正确或不正确的代码。

我正在将文件加载到单独的 R 数据帧中,标记为 x1、x2...xN 等。

我想组合数据框,这是我们要工作的代码:

assign("x",eval(parse(text=paste("rbind(",paste("x",rep(1:length(toAppend)),sep="",collapse=", "),")",sep=""))))

“toAppend”是加载到 x1、x2 等数据帧中的文件列表。

如果没有所有文本到代码技巧,它应该是这样的:

x <- rbind(##x1 through xN or some loop for 1:length(toAppend)#)

为什么 R 不能在没有评估文本技巧的情况下获取代码?这是好代码吗?如果我使用这个 IRL,我会被解雇吗?您知道将其写成循环的正确方法吗?有没有办法在没有循环的情况下做到这一点?一旦我组合了这些文件/数据帧,我就有一个超过 3000 万行的数据集,使用循环非常慢。运行我的示例代码行需要超过 24 小时才能从 ~400 个文件中获取 30M 行数据集。

4

1 回答 1

2

read.table如果这些数据帧都具有相同的结构,您将通过在orread.csv步骤中使用“colClasses”参数来节省大量时间。该lapply函数可以将其传递给read.*函数,如果您使用 Dason 猜测您真正在做什么,它将是:

 x <- do.call(rbind, lapply(file_names, read.csv, 
                                colClasses=c("numeric", "Date", "character")
               ))   # whatever the ordered sequence of classes might be

rbind不能采用字符向量的原因是对象的名称是“语言”对象,而字符向量是......只是不是语言类型。在 R 中将字符向量推过将“语言”与“数据”分开的半透膜需要使用assign, or do.call eval(parse())or 环境或参考类,或者可能是我忘记的其他方法。

于 2013-01-09T03:34:27.140 回答