如何消除R中的这个循环

时间:2014-03-17 04:13:19

标签: r for-loop

我发现以下代码运行速度太慢,所以我想任何人都可以帮助我消除循环并让我的代码运行得更快。这里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)
}

2 个答案:

答案 0 :(得分:3)

如果所有值都是非负的,则没有理由测试两者都大于零,因为零的最小值和任何正数都是零。因此,对于ab为零的任何位置,如果您取消测试,则不会向总和添加任何内容。

这使得以下内容成为一个等效的,更简单的解决方案:

sim_cal <- function(a,b) {
    sum(pmin(a,b))
}

答案 1 :(得分:2)

sim_cal <- function(a,b) {
  sum(pmin(a,b)[a > 0 & b > 0])
}