Может ли оператор `if` иметь более одного оператора` then`? - PullRequest
1 голос
/ 22 марта 2012

Может ли оператор 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 ]

4 голосов
/ 22 марта 2012

Вы должны иметь каждый оператор в отдельной строке (разделенной ;), а весь блок выполнения заключен в фигурные скобки

for(i in 1:10) { if(f[i]==2) {d[i]= 100; e[i]= -99}  }
3 голосов
/ 23 марта 2012

Да, вы можете, как уже упоминали другие. Также более понятно, если вы помещаете вещи в новые строки и используете некоторые отступы. Например, я мог бы написать твой код как

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
    }
}
3 голосов
/ 22 марта 2012

Вы, вероятно, путаете выражения if (иначе говоря, троичные операторы ) с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...