4

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

其中 dataset 是(大约)525000x300 大小的数据框。这memory.size()条线给了我不到 4GB 的使用空间,memory.limit()是 16GB。为什么替换行需要这么多内存才能执行?有没有办法在不达到内存限制的情况下进行替换(并且有什么好的技巧可以避免它),如果是这样,运行它会花费我很多时间吗?我对 R 还是很陌生,所以我不知道它是否会根据我使用的数据类以及 R 分配内存的方式有所不同......

4

1 回答 1

2

当你拨打这条线时

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

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

也许您可以尝试处理矩阵的较小部分,而不是一次性完成所有操作。

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

它既不快速也不优雅,但它可能会解决内存问题。

于 2013-05-02T18:46:43.813 回答