【发布时间】:2015-10-25 04:39:52
【问题描述】:
我对 R 中的内存使用有疑问。我在 for 循环中在 R 中的整个数据库上运行 Rcode。但是,代码在某些时候停止说它无法分配大小为 325.7 mb 的向量。当我查看任务管理器时,我看到它在我们的服务器上使用了 28gb 的 RAM。
我熟悉 R 中的 gc() 函数,但这似乎不起作用。例如。代码在第 15 次迭代中停止工作,说它无法分配向量。但是,如果我只运行第 15 次迭代(仅此而已),则完全没有问题。此外,对于每个新的迭代,我都会删除我的 DT,它是我的环境中迄今为止最大的对象。
代码示例:
DT <- data.table()
items <- as.character(seq(1:10))
for (i in items){
DT <- sample(x = 5000,replace = T)
write.csv(DT,paste0(i,".csv"))
gc()
rm(DT)
}
我感觉这个gc 函数在for 循环中不能正常工作。这是正确的还是有任何其他可能的问题,即在几次迭代后我的记忆是否已满?
【问题讨论】:
-
“我在 R 中的整个数据库上运行一个 Rcode,并在 for 循环中运行。”你的问题不是
gc。我确信垃圾收集按预期工作。您的问题是您的代码(您没有显示)。我经常使用 R,但几乎不需要for循环。请提供minimal reproducible example。 -
我有一个 1,2,3,...,N 的向量,对于每个 i,我打开一个 RData 文件,计算一些 Basel II 公式并将其再次保存在不同的文件夹中。因此它看起来像这样 for (i in 1:length(banks)) { load() ... do something save() rm(DT) }
-
例如像这样的 DT
标签: r memory garbage-collection