R : 在 R 中"cannot allocate vector size n mb"还有其他解决方案吗?



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

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

我可以使用BigMemory包引用我的数据库。并在我的数据库上使用函数。此外,我可以用ff包、filehash等来做这件事

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

"无法分配向量大小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的连续空间。不幸的是,经过多次操作后,内存可能过于碎片化。

如果可能的话,试着优化代码,一次使用小块数据。

如果您试图执行像您提到的那样的简单计算(例如,means、max of row等),您可能会尝试使用biganalytics,它允许您对big.matrix对象执行许多操作。

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

查看CRAN中的ff包。它通过将数据分配到固定文件上的内存插槽而不是使用RAM来"欺骗"R。它可以很好地导入数据。还可以使用ffbase包对ff对象执行简单高效的计算。

相关内容

最新更新