r - 如何在 R 中处理大矩阵或 data.frame

标签 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 

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

最佳答案

这可能有点令人惊讶,但 R 有点拖延。有可能“创建”对象的命令实际上可能不会这样做,直到存在真正的操作需求,例如用“真实”值填充矩阵。描述这一点的术语是“pass-by-promise”。此外,对现有对象的分配可能会构造该对象的重复甚至三重副本,这些副本将占用空间,直到它们被垃圾收集为止。

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

关于r - 如何在 R 中处理大矩阵或 data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19554249/

相关文章:

r - 为什么会出现这种情况? R 应用和库函数

python - 将两个具有不同维度、标签的矩阵相加并在总和矩阵中保留标签

hadoop - Hive-将数据复制到表时出错

RMarkdown - 使用 DT 创建列标题

r - 如何在R中编写map reduce?

python - 使 numpy.sum() 返回矩阵总和而不是单个数字

performance - 计算矩阵中每个值实例之间的行数

mysql - 大数据在成本和性能上适合频繁写入数据还是频繁读取数据?

bigdata - 在 GATE 源代码中添加自定义 jape 文件

r - Shiny:寻找简单的 selectInput 依赖解决方案