R : Any other solution to "cannot allocate vector size n mb" in R?

标签 r memory

我的问题在于对大数据集(大约 2500 万行和 10 列,即大约 1GB 数据)的简单计算。 我的系统是:

32bits/Windows7/4Gb Ram/R Studio 0.96, R 2.15.2

我可以使用 BigMemory 包来引用我的数据库。并在我的数据库上使用函数。我也可以使用 ff 包、filehash 等来做到这一点。

问题是在计算简单计算(如唯一值、平均值等)时,我遇到了典型的问题

"cannot allocate vector size n mb"

,其中 n 可以小至 70mb - 95mb 等。

我知道到目前为止提供的所有(我认为)解决方案:

increase RAM.
launch R with inline code "--max-mem-size XXXX",  
use memory.limit() and memory-size() commands, 
use rm() and gc(), 
work on 64bit, 
close other programs, free memory, reboot, 
use packages bigmemory, ff, filehash, sql, etc etc.
improve your data, use integers, shorts, etc. ...  
check memory usage of intermediate calculations, ... 
etc. 

所有这些都经过测试,完成,(除了转移到另一个系统/机器,很明显)等等。

但我仍然得到那些“无法分配向量大小 n mb”,例如,其中 n 约为 90mb,R 或其他程序几乎没有使用内存,所有这些都重新启动,新鲜......我知道自由内存和从windows和R等分配的区别,但是,

没有意义,因为可用内存超过 3GB。 我怀疑原因确实是在 windows32b 下——R 内存管理,但购买 4GB 的 RAM 或将所有系统切换到 64 位以分配 70mb 似乎几乎是个笑话。

我有什么遗漏吗?

最佳答案

问题在于 R 尝试分配 90mb 的连续空间。不幸的是,经过多次操作,可能内存太碎片化了。

如果可能,请尝试优化您的代码以一次使用小块数据。

如果您尝试像您提到的那样执行简单的计算(例如,均值、最大行数等),您可以尝试使用 biganalytics,它可以让您做一个数字big.matrix 对象的操作。

否则,据我所知,除了切换到 64 位操作系统和 64 位 R 之外,没有什么可做的。

关于R : Any other solution to "cannot allocate vector size n mb" in R?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13343299/

相关文章:

linux - 通过减少 Linux 中的交换内存大小来增加 ext4 分区大小

c++ - WinHttpOpen 泄漏内存

c - 获取png图像的高度和重量

r - 如何在 R 中创建函数以从全局环境中删除除默认值和作为参数传递的对象之外的所有对象

r - R 中 apply.monthly 的每月操作时间序列

R:使用 Mersenne-Twister 种子将来自 runif 的随机值极端聚集

c - Unix/C : put a file into shared memory

python - 删除所有观测值具有相同值的列是否会影响我的模型?

r - 将 data.frame 变量名称传递给 r 中的熔化和类型转换

.net - 进程内存v.s. AppDomain 内存分配