首页 > 解决方案 > R使用if next break in for循环出错

问题描述

我正在尝试if在循环中使用语句,for以便如果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). 我不想计算var2 我的var1 == NA. 简而言之,我想从这个循环中得到的结果是var2 = c(22.5, NA, 20.0).

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

标签: rfor-loopif-statementnext

解决方案


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

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

推荐阅读