作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将值分配给“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 有点拖延。有可能“创建”对象的命令实际上可能不会这样做,直到存在真正的操作需求,例如用“真实”值填充矩阵。描述这一点的术语是“pass-by-promise”。此外,对现有对象的分配可能会构造该对象的重复甚至三重副本,这些副本将占用空间,直到它们被垃圾收集为止。
所以这就是你要做的。退出 R。断电。使用最少的其他应用程序重新启动系统,因为它们都会占用内存。重新启动 R 并运行命令。如果您在系统加载之前拥有典型的 4GB 可用内存,我预计会成功。 228.9 Mb 实际上并不是很大,但在你的情况下,它是压垮 Camel 的最后一根稻草。 R 需要能够为每个对象找到连续的内存,并且垃圾收集通常不会对内存进行碎片整理。
关于r - 如何在 R 中处理大矩阵或 data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19554249/
我是一名优秀的程序员,十分优秀!