【发布时间】:2018-04-09 12:39:52
【问题描述】:
我有一个 16 GB 的内存,在 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 帮助下运行它吗?我假设几列中的日期时间格式可能会占用大量资源。还没有尝试过,因为我需要日期时间格式的列。
【问题讨论】:
-
不要在循环中手动调用
gc。除了绕过优化并可能严重减慢执行速度之外,您将一无所获。您的问题是您正在循环中增长一个对象。不要那样做。它不仅速度慢,而且会破坏你的记忆。
标签: r optimization memory-management