【问题标题】:how to deal with a big matrix or data.frame in R如何处理 R 中的大矩阵或 data.frame
【发布时间】:2013-10-23 23:33:59
【问题描述】:

我正在尝试将值分配给“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 

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

【问题讨论】:

    标签: r matrix bigdata


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 2021-12-13
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      相关资源
      最近更新 更多