Подтвердить что ты не робот

If - else if - else инструкция и скобки

Я понимаю, что обычный способ написать оператор if - else if следующий:

if (2==1) {
  print("1")
} else if (2==2) {
  print("2")
} else {
  print("3")
}

или же

if (2==1) {print("1") 
} else if (2==2) {print("2")
} else print("3")

Наоборот, если я напишу так

if (2==1) {
  print("1")
} 
else if (2==2) {
  print("2")
}
else (print("3"))

или так:

if (2==1) print("1") 
else if (2==2) print("2")
else print("3")

утверждение не работает. Можете ли вы объяснить мне, почему } должно предшествовать else или else if, else if в одной и той же линии? Есть ли какой-нибудь другой способ написать оператор if-else if-else в R, особенно без скобок?

4b9b3361

Ответ 1

R читает эти команды по строкам, поэтому он думает, что вы закончили после выполнения выражения после оператора if. Помните, вы можете использовать if без добавления else.

Ваш третий пример будет работать в функции, потому что вся функция определена перед выполнением, поэтому R знает, что она еще не выполнена (после if() do).

Ответ 2

В R также имеется функция ifelse():

ifelse(1 < 0, "hello", "hi")

Вывод:

# [1] "hi"

Ответ 3

Как hrbrmstr упомянул:

Если начальное значение if сопровождается составным выражением (указанное пара {}) синтаксический анализатор по умолчанию ожидает выражения а затем еще и быть сложным. Единственное определенное использование else с составными выражениями.

В заявлении if(cond) cons.expr else alt.expr значение else должно быть указано после и в той же строке с концом `cons.expr '.

Итак, если вы хотите, чтобы ваш код выглядел лучше без скобок, примените этот способ:

if (2==1) print("1") else 
   if (2==2) print("2") else 
      print("3")

Ответ 4

Это хорошая идея использовать фигурные скобки, когда есть вложенные ifs. Например, в

if(n>0)
    if(a>b)
        z=a;
    else
        z=b;

else идет с внутренним, если не с if (n > 0). Если это не то, что вы хотите, скобки должны использоваться для принудительной ассоциации:

if(n>0){
    if(a>b)
        z=a;
}
else
    z=b;

Подробнее, очень хороший полный учебник: Условные операторы: if-else, else-if и switch in C! Надеюсь, это поможет вы!