如何避免R中的内存限制

我正在尝试替换矩阵中的值,特别是“t” – > 1和“f” – > 0,但我不断收到错误消息:

Error: cannot allocate vector of size 2.0 Mb
...    
Reached total allocation of 16345Mb: see help(memory.size)

我在RStudio的64位版本的R上使用的是带有16GB内存的Win7计算机.

我目前正在运行的是什么

a <- matrix( dataset, nrow=nrow(dataset), ncol=ncol(dataset), byrow=TRUE)
memory.size()
a[a=="t"] <- 1

其中数据集是(约)525000×300大小的数据框. memory.size()行给了我少于4GB的内存,而memory.limit()是16GB.为什么替换线需要如此多的内存才能执行?有没有办法在没有达到内存限制的情况下进行替换(并且有一般的避免它的任何好的提示),如果是这样,是否会花费我很多时间来运行它?我还是R的新手,所以我不知道它是否有所不同,具体取决于我使用的数据类以及R如何分配内存……

最佳答案 当你拨打这一行时

a[a=="t"] <- 1

R必须创建一个全新的布尔矩阵来索引到a.如果a很大,这个布尔矩阵也将是巨大的.

也许你可以尝试在矩阵的较小部分上工作,而不是试图一次性完成所有操作.

for (i in 1:ncol(a)){
  ix = (a[:,i] == "t")
  a[ix,i] = 1
}

它不是快速或优雅,但它可能会解决内存问题.

点赞