如何避免R中的内存限制

时间:2013-05-02 17:43:35

标签: r memory

我正在尝试替换矩阵中的值,特别是“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

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

1 个答案:

答案 0 :(得分:2)

当你拨打这一行时

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

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

也许你可以尝试处理矩阵的较小部分,而不是一次性尝试全部。

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

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