【发布时间】:2013-01-16 06:31:37
【问题描述】:
我正在一台 16GB 内存的机器上运行一些模拟。首先,我遇到了一些错误:
Error: cannot allocate vector of size 6000.1 Mb (the number might be not accurate)
然后我尝试使用以下方法为 R 分配更多内存:
memory.limit(1E10)
之所以选择这么大的数字是因为memory.limit不允许我选择小于我系统总内存的数字
In memory.size(size) : cannot decrease memory limit: ignored
完成此操作后,我可以完成我的模拟,但 R 占用了大约 15GB 内存,这使我无法进行任何后期分析。
我使用object.size() 估算了所有生成变量的总内存使用量,只占用了大约 10GB。我不知道 R 把剩下的内存放在哪里了。所以我的问题是如何在不爆炸机器的情况下合理地为 R 分配内存?
谢谢!
【问题讨论】:
-
您确定您已经查看了所有现有变量吗?
ls(all=TRUE)是否只列出您生成的那些?请注意,即使删除了一个对象,在调用垃圾收集器之前,用于存储该对象的内存也不是空闲的。 R 会定期执行此操作,但您可以使用gc()强制收集。 -
我没有检查所有内存的内存使用情况。但我确实在每次迭代后在我的模拟中使用了 gc()...
-
一般来说,您需要大约 3 倍于对象占用的内存量。这是因为对象的复制。
-
@PaulHiemstra:这意味着我的 R 会话的内存使用情况正常吗?关于如何优化它的任何建议?谢谢
标签: r memory-management