【发布时间】:2017-12-20 09:39:21
【问题描述】:
类似的 Q 可能是 R: Applying readRDS to a list object of .Rds file names,但是,该解决方案并不比我的 for loop 更有效。
在一个文件夹中,我存储了500.rds files,命名为file_1.rds、file_2.rds、...、file_500.rds。
每个文件都包含大约200 records 和6 variables,它们是大data.frame 的小块。
mydf <- data.frame()
for (m in 1 : 500) {
temp <- readRDS(paste0("H://myfolder//file_",m, ".rds"))
mydf<- rbind(mydf, temp)
}
您对更有效的方法或如何改进代码有任何建议吗?
此外,由于我创建了这些500 .rds files,因此我愿意改进write 流程,例如保存.csv 或任何其他比.rds 更有效的阅读格式。
【问题讨论】:
-
使用
parallel::mclapply怎么样?对于写入过程,您可以签出fst包github.com/fstpackage/fst/blob/develop/README.md。另外,我会将文件读入一个列表,并且只一次使用data.table::rbindlist将它们组合成一个表。 -
您是否建议在
parallel::mclapply中使用data.table::rbindlist?就写入而言,每个file_x都是一个长而复杂的函数的一次迭代的结果,因此,我唯一关心的是改变file_x的扩展名,以改进以下读取先前获得的所有块的过程 -
不,我建议使用
parallel::mclapply仅读取文件(并行化),然后之后在结果列表上运行单个 rbindlist。