我在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()
}
答案 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。