替换Matrix

时间:2017-12-20 23:05:44

标签: r

我目前在编写的脚本中遇到内存使用问题。问题所在的代码:

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)
    }
}

对于上下文,compiledMatrixresultsMatrix都是巨大的逻辑矩阵,compiledMatrix44 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每次我想修改它时都创建一个新矩阵?

0 个答案:

没有答案