R 使用 if next break in for 循环时出错
R Error with using if next break in for loop
我正在尝试在 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
。任何建议将不胜感激!
您需要在循环之前初始化向量,而不是每次迭代都在循环内。此外,检查结果 在 循环之后,而不是每次迭代。
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
我正在尝试在 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
。任何建议将不胜感激!
您需要在循环之前初始化向量,而不是每次迭代都在循环内。此外,检查结果 在 循环之后,而不是每次迭代。
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