我发现以下代码运行速度太慢,所以我想任何人都可以帮助我消除循环并让我的代码运行得更快。这里a和b是两个从0到4的整数列表,其中大部分是0。
sim_cal<-function(a,b){
intScore <- 0
for (i in 1:length(a)){
if (a[i]>0 && b[i]>0){
intScore <- intScore + min(a[i],b[i])
}
}
return(intScore)
}
答案 0 :(得分:3)
如果所有值都是非负的,则没有理由测试两者都大于零,因为零的最小值和任何正数都是零。因此,对于a
或b
为零的任何位置,如果您取消测试,则不会向总和添加任何内容。
这使得以下内容成为一个等效的,更简单的解决方案:
sim_cal <- function(a,b) {
sum(pmin(a,b))
}
答案 1 :(得分:2)
sim_cal <- function(a,b) {
sum(pmin(a,b)[a > 0 & b > 0])
}