我正在尝试替换矩阵中的值,特别是“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如何分配内存......
答案 0 :(得分:2)
当你拨打这一行时
a[a=="t"] <- 1
R必须创建一个全新的布尔矩阵来索引到a。如果a很大,这个布尔矩阵也会很大。
也许你可以尝试处理矩阵的较小部分,而不是一次性尝试全部。
for (i in 1:ncol(a)){
ix = (a[:,i] == "t")
a[ix,i] = 1
}
这不是快速或优雅,但可能会解决内存问题。