R:在R中“无法分配矢量大小n mb”的任何其他解决方案?

时间:2012-11-12 11:57:44

标签: r memory

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

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

我可以使用BigMemory包引用我的数据库。并使用我的数据库上的函数。我也可以用ff包,filehash等来实现。

问题在于计算简单计算(作为唯一值,均值等)时,我有

的典型问题
  

“无法分配矢量大小n mb”

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

我知道所有(我认为)迄今为止提供的解决方案:

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下的内容 - 内存管理,但是购买4GB内存或将所有系统切换到64位似乎是一个笑话,分配70mb。

我有什么遗失的吗?

2 个答案:

答案 0 :(得分:4)

问题是R试图分配90mb的连续空间。不幸的是,经过多次操作后,内存可能过于分散。

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

如果您正在尝试执行您提到的简单计算(例如,表示行,最大行等),您可以尝试使用biganalytics,这允许您对其进行大量操作big.matrix个对象。

否则,据我所知,如果没有切换到64位操作系统和64位R,那就没什么用了。

答案 1 :(得分:1)

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