если еще конкатенация операторов - R - PullRequest
0 голосов
/ 04 марта 2019

Это очень распространенный вопрос: 1 , 2 , 3 , 4 , 5 ,и все же я не могу найти даже ответа на мою проблему.

If a == 1, then do X.
If a == 0, then do Y.
If a == 0 and b == 1, then do Z.

Просто чтобы объяснить: операторы if else должны делать Y, если a==0, независимо от значения b.Но если b == 1 и a == 0, Z внесет дополнительные изменения в уже сделанные Y.

Мой текущий код и его ошибка:

if (a == 1){
X
} else if(a == 0){
Y
} else if (a == 0 & b == 1){ 
Z}

Error in !criterion : invalid argument type

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Я полагаю, вы хотите включить Z во второе условие, как это:

if (a == 1){X}
else if(a == 0){
    Y
    if (b == 1){Z}
}
0 голосов
/ 04 марта 2019

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