`if`语句可以有多个`then`语句吗?

时间:2012-03-22 19:23:43

标签: r

if语句是否可以包含多个then语句?

# this works

a <- c(1,2,3,4,5,6,7,8,9,10)
b <- c(4,3,5,2,8,9,1,2,2,4)
c <- c(9,9,9,5,5,5,2,2,2,1)
for(i in 1:10) { if(c[i]==2) a[i]= 100; if(c[i]==2) b[i]= -99  }


# this does not work

d <- c(1,2,3,4,5,6,7,8,9,10)
e <- c(4,3,5,2,8,9,1,2,2,4)
f <- c(9,9,9,5,5,5,2,2,2,1)
for(i in 1:10) { if(f[i]==2) (d[i]= 100 & e[i]= -99)  }

3 个答案:

答案 0 :(得分:4)

您需要将每个语句放在一个单独的行中(由;分隔)并将整个执行块括在花括号中

for(i in 1:10) { if(f[i]==2) {d[i]= 100; e[i]= -99}  }

答案 1 :(得分:3)

您可能会将if - 表达式(a.k.a。ternary operators)与if - 语句混淆。在后者中,您通常使用括号括起来的语句块,这些语句由分号或换行符分隔:

R> for(i in 1:10) if(f[i]==2) { d[i]= 100; e[i]= -99 }
R> d
 [1]   1   2   3   4   5   6 100 100 100  10
R> e
 [1]   4   3   5   2   8   9 -99 -99 -99   4

此外,这里有一个更快的等价物:

a[which(c==2)] = 100
b[which(c==2)] = -99

答案 2 :(得分:3)

是的,你可以像其他人提到的那样。如果你把东西放在新的行上并使用一些缩进惯例,那也更清楚了。例如,我可能会编写像

这样的代码
a <- 1:10
b <- c(4, 3, 5, 2, 8, 9, 1, 2, 2, 4)
c <- c(9, 9, 9, 5, 5, 5, 2, 2, 2, 1)
for(i in 1:10){
    if(c[i] == 2){
        a[i] <- 100
        b[i] <- -99
    }
}