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 

谁能帮我处理更大的矩阵?

4

1 回答 1

7

这可能有点令人惊讶,但 R 有点拖延症。有可能“创建”对象的命令实际上可能不会这样做,直到对操作有真正的需求,例如用“真实”值填充矩阵。描述这一点的术语是“通过承诺”。此外,对现有对象的赋值可能会构造对象的重复甚至三倍,这将占用空间直到它们被垃圾收集。

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

于 2013-10-23T23:41:52.170 回答