7

我的问题在于对大数据集(大约 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 似乎几乎是个笑话。

有什么我想念的吗?

4

2 回答 2

4

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

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

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

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

于 2012-11-12T12:03:47.863 回答
1

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

于 2013-02-28T20:41:59.640 回答