【问题标题】:R Error with using if next break in for loopR使用if next break in for循环出错
【发布时间】:2019-12-09 19:28:48
【问题描述】:

我正在尝试在for 循环中使用if 语句,这样如果不满足if 条件,R 将停止为该i 值运行循环,但将继续运行整个循环,我认为我遇到了一个(简单的?)语法错误,这给了我与预期不同的结果。

下面是我的示例数据集和我的循环:

test <- matrix(ncol=3, nrow=3, data = c(10, 20, 30, NA, 10, 20, 10, 30, 20), byrow = T)
mean_fun<-function(x,y){
  mean <- sum(x,y)/2
  return(mean)
}

for (i in (1:nrow(test))){
  var1 <- vector()
  var2 <- vector()
  var1[i] <- mean_fun(test[i,1], test[i,2])
  if (is.na(var1[i]==TRUE)) next
  var2[i] <- mean_fun(var1[i], test[i,3])
  print(var2)
}

如果我只计算循环中的var1 值,var1 = c(15, NA, 20)。如果我的var1 == NA,我不想计算var2。简而言之,我想从这个循环中得到的结果是var2 = c(22.5, NA, 20.0)。

但是当我运行这个循环时,我得到了[1] 22.5 [1] NA NA 20,这意味着循环在i=1 和i=2 上运行正常,但在i=2 或i=3 期间却搞砸了?我无法弄清楚语法是如何工作的,所以它给了我NA NA 20。任何建议将不胜感激!

【问题讨论】:

    标签: r for-loop if-statement next


    【解决方案1】:

    您需要在循环之前初始化您的向量,而不是每次迭代都在循环内。另外,在循环之后检查结果,而不是每次迭代。

    var1 <- vector()
    var2 <- vector()
    
    for (i in (1:nrow(test))){
      var1[i] <- mean_fun(test[i,1], test[i,2])
      if (is.na(var1[i]==TRUE)) next
      var2[i] <- mean_fun(var1[i], test[i,3])
    }
    
    var1
    # [1] 15 NA 20
    var2
    # [1] 22.5   NA 20.0
    

    【讨论】:

      猜你喜欢
      • 2016-03-27
      • 2019-01-23
      • 2019-11-03
      • 2017-06-09
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      相关资源
      最近更新 更多