R C堆栈分配

时间:2016-04-12 14:30:21

标签: r stack stack-memory

我有一个脚本,我在其中循环> 1k csv文件,合并它们并保存合并另一个csv文件。

#Loading libraries
library("dplyr")
library("data.table")

#loop over my files
for(i in seq(1,1000))
{
    file <- read.csv(paste0("/my/path/", filesList[i]), stringsAsFactors=FALSE, row.names=NULL)

if(exists("merge")){

    merge <- bind_rows(merge, file)

}else {
    merge <- file
}

}
#Save the merged files
write.csv(merge, file="/path/merge.csv")

我收到以下错误:

Error: memory exhausted (limit reached?)
Error: segfault from C stack overflow
Error: C stack usage  140736289161248 is too close to the limit

仅供参考,在写入csv之前gc返回

>           used  (Mb) gc trigger  (Mb) max used  (Mb)

>Ncells   504073  27.0     940480  50.3   750400  40.1

>Vcells 32397836 247.2   83331575 635.8 83281289 635.4

我为R分配了2 GB的RAM,并将有限的堆栈大小分配给1M。

我的问题分为两部分:

  1. 在限制内存使用时,我应该遵循一般的RAM /堆栈比率吗? (例如:对于每1GB的RAM,你应该拥有1M的堆栈)
  2. 面对这种情况时,有更好的方法来编写代码吗? (例如:将每个file直接附加到merged.csv文件,然后加载merged.csv

0 个答案:

没有答案