我正在尝试优化此嵌套的for循环,该循环需要2个数字的最小值,然后将结果添加到数据框。我可以使用向量化和初始化功能将其大幅削减,但是我不太确定如何将这种逻辑应用于嵌套的for循环。有没有一种快速的方法可以使运行速度更快?坐在超过5个小时的运行时间上。

“模拟”的值为100k,“极限”的值为5427

output <- data.frame(matrix(nrow = nrow(simulation),ncol = nrow(limits)))
res <- character(nrow(simulation))

for(i in 1:nrow(limits)){
    for(j in 1:nrow(simulation)){
        res[j] <- min(limits[i,1],simulation[j,1])
    }
    output[,i] <- res
}


编辑*

dput(head(simulation))
    structure(list(simulation = c(124786.7479,269057.2118,80432.47896,119513.0161,660840.5843,190983.7893)), .Names = "simulation", row.names = c(NA,6L), class = "data.frame")

dput(head(limits))
    structure(list(limits = c(5000L,10000L,20000L,25000L,30000L)), .Names = "limits", row.names = c(NA, 6L), class = "data.frame")

最佳答案

如果您的RAM大于15GB(〜100K * 5500 *每个数字8个字节* 3(结果+外部x值+外部y值)),您可以尝试:

outer(simulation[[1]], limits[[1]], pmin)


尽管实际上您可能需要超过15GB的空间,因为我认为pmin会重复更多内容。如果您没有ram,则必须解决这个问题(例如,依赖于一次执行某列的代码或类似的代码)。

09-10 08:03
查看更多