我目前在编写的脚本中遇到内存使用问题。问题所在的代码:
for (i in 1:44){
selectToAnd <- testList[,2]==i
toAnd <- resultsMatrix[,selectToAnd, drop = FALSE]
if(ncol(toAnd)==1){
compiledMatrix[,i] <- toAnd
}
else{
compiledMatrix[,i] <- rowSums(toAnd)==ncol(toAnd)
}
}
对于上下文,compiledMatrix
和resultsMatrix
都是巨大的逻辑矩阵,compiledMatrix
是44
cols ~3
百万行,resultsMatrix
是~100
cols ~3
百万行。我无法在这里组建一个可重现的示例,因为我的问题是由于所讨论的对象的大小。
当我运行它时,它会告诉我Error: cannot allocate vector of size 556.4 Mb
。据我所知,问题在于:
if(ncol(toAnd)==1){
compiledMatrix[,i] <- toAnd
}
else{
compiledMatrix[,i] <- rowSums(toAnd)==ncol(toAnd)
}
我认为可能发生的事情是当我更改compiledMatrix
行时,R
为新版本的矩阵分配内存。我认为这是因为我使用compiledMatrix
检查时550 Mb
约为object.size()
的原因之一。我在循环之前将所有TRUE
的逻辑矩阵声明为compiledMatrix
,以避免通过将列粘贴在一起来创建它。这是正在发生的事情是否合理?如果是这样,有没有办法阻止R
每次我想修改它时都创建一个新矩阵?