如何处理R中的大矩阵或data.frame

时间:2013-10-23 23:33:59

标签: r matrix bigdata

我正在尝试将值分配给“10000000 * 6”逻辑矩阵。这个过程将是1)创建一个矩阵; 2)然后将值分配给矩阵的每个元素。为了简化我的问题,我只展示如何将一个值分配给矩阵的一个元素。

以下是代码:

m <- matrix(data = NA, ncol= 6, nrow= 10000000)
m[1,1] <- 1

错误:无法分配大小为228.9 Mb的矢量

创建“10000000 * 6”逻辑矩阵时没有错误,但是在分配值时会有错误。

我也尝试过相同的任务但是使用更小的矩阵(100 * 6)。事情很顺利。

以下是代码:

m <- matrix(data = NA, ncol= 6, nrow= 100)
m[1,1] <- 1 

有人可以帮我处理更大的矩阵吗?

1 个答案:

答案 0 :(得分:7)

这可能有点令人意外,但R有点像拖延者。在真正需要动作之前,“创建”对象的命令可能实际上不会这样做,例如填充具有“真实”值的矩阵。描述这个词的术语是“传递承诺”。此外,对现有对象的赋值可能构造对象的重复甚至三次重复,这将占用空间,直到它们被垃圾收集。

所以这就是你做的。退出R.断电。使用最少的其他应用程序重新启动系统,因为它们都占用内存。重新启动R并运行命令。如果您在系统加载之前拥有典型的4GB内存,我预测会成功。 228.9 Mb并不是真的很大,但在你的情况下它是打破骆驼背部的稻草。 R需要能够为每个对象找到连续的内存,垃圾收集通常不会对内存进行碎片整理。