【发布时间】:2018-03-09 12:50:46
【问题描述】:
我正在尝试优化这个嵌套的 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")
【问题讨论】:
-
看看
apply家庭,我认为lapply适合您的情况。它可以有效地替代for并且运行速度更快(或者我发现并阅读了其他人的发现)。另外,我们可以得到dput(head(simulation))和dput(head(limits))吗?那么我们可以看到数据的结构吗?如果你完全矢量化sapply可能会完成工作(不过我不太擅长)。 -
您正在进行 5.42 亿次计算。你到底要如何处理生成的
output矩阵? -
@thelatemail 计算有限方差/标准。 dev 用于复杂的分布,没有好的公式可以仅计算理论值,因此我们正在使用模拟
标签: r loops for-loop optimization nested