【发布时间】:2017-11-13 20:46:45
【问题描述】:
我正在一个 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()
}
【问题讨论】:
-
您存储的数据帧有多大?也许每 1000 次迭代,您可以将它们写入文件然后清除它们。您的工作区中是否还有其他对象?模型,也许?您可以执行
sort(sapply(ls(), object.size), decreasing = T)之类的操作来查看您使用的对象有多大。 -
与我的文本文件相比,数据框的大小非常小。它的总大小为 100MB。我实际上并没有在数据框中附加观察结果。相反,我在每次迭代中将其直接附加到 CSV 中。我一定会根据您提到的方法检查每个对象的大小。我会让你知道它是否有效。谢谢。