如何在R中处理大矩阵或数据框

3
我正在尝试为一个"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个回答

7
可能会有些惊讶,但R是一个有点拖延症的软件。可能在"创建"对象的命令实际执行之前不会真正地创建对象,直到需要采取行动,比如用"真实"值填充矩阵。描述这种情况的术语是"按承诺传递"。此外,对现有对象进行赋值可能会构造重复或甚至三倍于该对象的副本,这些副本将占用空间,直到垃圾收集。

因此,这里是你需要做的事情。退出R。关闭电源。用最少的其他应用程序重新启动系统,因为它们都会占用内存。重新启动R并运行你的命令。如果你的系统在负载前有典型的4GB内存可用,我预测这样做会成功。228.9 Mb其实不算很大,但在你的情况下,它是压垮骆驼的最后一根稻草。R需要能够为每个对象找到连续的内存,并且垃圾回收通常不会碎片化内存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接