所以我有一个朋友用一些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行数据集。
答案 0 :(得分:2)
如果这些数据框架都具有相同的结构,那么通过使用read.table
或read.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
或do.call
eval(parse())
或环境或参考类或我忘记的其他方法