我正在尝试优化此嵌套的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,则必须解决这个问题(例如,依赖于一次执行某列的代码或类似的代码)。