如何处理R中的大矩阵或data.frame

use*_*518 3 r matrix bigdata

我正在尝试将值分配给"10000000*6"逻辑矩阵.这个过程将是1)创建一个矩阵; 2)然后将值分配给矩阵的每个元素.为了简化我的问题,我只展示如何将一个值分配给矩阵的一个元素.

以下是代码:

m <- matrix(data = NA, ncol= 6, nrow= 10000000)
m[1,1] <- 1
Run Code Online (Sandbox Code Playgroud)

错误:无法分配大小为228.9 Mb的向量

创建"10000000*6"逻辑矩阵时没有错误,但是在分配值时会出现错误.

我也尝试过相同的任务但是使用更小的矩阵(100*6).事情很顺利.

以下是代码:

m <- matrix(data = NA, ncol= 6, nrow= 100)
m[1,1] <- 1 
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我处理更大的矩阵吗?

42-*_*42- 7

这可能有点意外,但R有点像拖延者.在真正需要动作之前,"创建"对象的命令可能实际上不会这样做,例如填充具有"真实"值的矩阵.描述这个词的术语是"传递承诺".此外,对现有对象的赋值可以构造对象的重复或甚至三次重复,这将占用空间直到它们被垃圾收集.

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