R在每次迭代中使用大输入文件累积内存

时间:2017-11-13 20:46:45

标签: r loops memory

我在for循环中阅读大约20,000个文本文件以进行情绪分析。每个文件大小约为20-40 MB。在每个循环中,我从输入文本中取出一些情绪计数(只有2个数字)并将其存储在数据帧中。问题是,在每次迭代中,我都可以看到R累积累积内存。在10,000个文件之后,我在任务管理器中看到R的13GB内存分配。我尝试了gc()和rm()在每次迭代后删除对象,但它仍然不起作用。逻辑是因为我迭代地使用相同的对象R没有释放在先前迭代中使用的内存。

for(i in 1:20,000){
 filename <- paste0("file_", i, ".txt")
 text <- readLines(filename)

 # Doing sentiment analysis based on dictionary based approach

 # Storing sentiment counts in dataframe

 # Removing used objects
 rm(filename, text)
 gc()  
}

1 个答案:

答案 0 :(得分:0)

您可以尝试检查哪些对象占用内存并且您不再使用它们:

print(sapply(ls(), function(x) pryr::object_size(get(x))/1024/1024))

(编辑:刚看到这条评论几乎相同的建议)

此行将为您提供环境中每个对象(在RAM中)的大小(以兆字节为单位)。

或者,如果没有显示任何内容,您可以多次拨打gc()而不是一次:

rm(filename, text)
for (i in 1:3) gc()

通常更有效...... 如果没有任何作用,那可能意味着内存碎片化,因此RAM是免费的,但不能用作您仍然使用的数据之间的错位。 解决方案可能是通过大块的文件来运行脚本,例如1000 x 1000。