我有一个16 GB的ram在64位版本的R上运行w10 64位。 我试图在这个链接(http://www.nyc.gov/html/tlc/html/about/trip_record_data.shtml)上合并一堆CSV,特别是黄色位 编辑:仅适用于一年的atm,但是一旦有效,就会导入更多数据
继承人正在运行的代码
library(readr)
FList <- list.files(pattern = "*.csv")
for (i in 1:length(FList))
{
print(i)
assign(FList[i], read_csv(FList[i]))
if (i==2) {
DF<-rbind(get(FList[1]),get(FList[2]))
rm(list = c(FList[1],FList[2]))
}
if (i>2)
{
DF<-rbind(DF,get(FList[i]))
rm(list = FList[i])
}
gc()
}
我在第6次迭代时得到错误,任务管理器在rbind操作期间显示90%的内存使用率,但在完成后降至60
错误后运行gc()给出以下内容
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 3821676 204.1 10314672 550.9 13394998 715.4
Vcells 1363034028 10399.2 3007585511 22946.1 2058636792 15706.2
>
我对此没有太多经验,任何优化代码的帮助都会受到赞赏。 p.s会用read.csv帮助运行吗?我假设几列中的日期时间格式可能是资源匮乏的。还没试过,因为我需要日期时间格式的列。
答案 0 :(得分:2)
您可以使用lapply而不是循环
来尝试files <- list.files(pattern = glob2rx("*.csv"))
df <- lapply(files, function(x) read.csv(x))
df <- do.call(rbind, df)
另一种方法是将它们添加到命令行而不是R中。这应该是内存密集度较低的。只需谷歌附加csv和您的操作系统相应的命令行工具。
答案 1 :(得分:0)
从行bind_rows
开始,按行数据帧绑定的更有效,更快捷的方法是dplyr
。
Here更多细节。
您的代码改编为bind_rows
:
library(readr)
library(dplyr)
FList <- list.files(pattern = "*.csv")
for (i in 1:length(FList))
{
print(i)
assign(FList[i], read_csv(FList[i]))
if (i==2) {
DF<-bind_rows(get(FList[1]),get(FList[2]))
rm(list = c(FList[1],FList[2]))
}
if (i>2)
{
DF<-bind_rows(DF,get(FList[i]))
rm(list = FList[i])
}
gc()
}
如果问题仍然存在,如果可能,请尝试以this方式增加RAM大小。