else
происходит только в том случае, если предыдущий if
не произошел .
Когда вы говорите
Но если b == 1
и a == 0
, Z
внесет дополнительные изменения к уже выполненным Y
Тогда у вас есть два варианта:
## Option 1: nest Z inside Y
if (a == 1){
X
} else if(a == 0){
Y
if (b == 1){
Z
}
}
## Option 2: just use `if` again (not `else if`):
if (a == 1) {
X
} else if(a == 0) {
Y
}
if (a == 0 & b == 1) {
Z
}
На самом деле, вам вообще здесь не нужно else
.
## This will work just as well
## (assuming that `X` can't change the value of a from 1 to 0
if (a == 1) {
X
}
if (a == 0) {
Y
if (b == 1){
Z
}
}
Обычно else
требуется, когда вы хотитеиметь «окончательное» действие, которое выполняется только в том случае, если не использовались никакие из предыдущих опций if
, например:
# try to guess my number between 1 and 10
if (your_guess == 8) {
print("Congratulations, you guessed my number!")
} else if (your_guess == 7 | your_guess = 9) {
print("Close, but not quite")
} else {
print("Wrong. Not even close!")
}
В приведенном выше примере else
полезно, потому что я не хочуперечислить все другие возможные предположения (или даже неверные входные данные), которые может ввести пользователь.Если они угадывают 8, они выигрывают.Если они угадывают 7 или 9, я говорю им, что они были близки.Что-нибудь еще, независимо от того, что это, я просто говорю «неправильно».
Примечание: это верно для языков программирования в целом.Он не уникален для R.
Однако, поскольку это в теге R, я должен упомянуть, что R имеет if{}else{}
и ifelse()
, и они отличаются.
if{}
(и, необязательно, else{}
) оценивает одно условие, и вы можете запустить код для выполнения что угодно в {}
в зависимости от этого условия. ifelse()
- этовекторизованная функция, ее аргументы test
, yes
, no
.test
оценивает логический вектор значений ИСТИНА и ЛОЖЬ.Аргументы yes
и no
должны быть векторами такой же длины, что и test
.Результатом будет вектор такой же длины, что и test
, с соответствующими значениями yes
(когда test
TRUE) и no
(когда test
FALSE).