Если оператор в R может иметь только одну строку?

Я пробовал крошечный код с выражением if, хотя он очень прост, но есть кое-что, что я действительно смутил здесь, это код

n<-857
while(n!=1){
if(n<=0)
 print("please input a positive integer")
else if(n%%2==0)
 n<-n/2
 print(n)
else
 n<-3*n+1
 print(n)
  }

как мы видим выше, при запуске этого кода в R возникает ошибка, но если я изменяю оператор if, подобный этому

if(n<=0)
     print("please input a positive integer")
    else if(n%%2==0)
     n<-n/2
    else
     n<-3*n+1

это нормально, мой вопрос в том, что мы можем писать только одну строку под каждым суждением? если я хочу сделать что-то еще после каждого судьи, что мне делать, точно так же, как этот случай, я хочу изменить значение n, но также хочу отобразить его, что мне делать? большое спасибо

Ответ 1

Чтобы быть точным, речь идет не о строках, а о операторах. Вы можете иметь целый оператор if else в одной строке:

> if (TRUE) 1 else 3
[1] 1

Оператор завершается в конце строки (если он завершен), вы можете прекрасно это увидеть в интерактивном режиме, если вы вводите код по строкам:

> if (TRUE) 
+ 1
[1] 1
> else
Fehler: Unerwartete(s) 'else' in "else" # error: unexpected 'else' in "else"
> 3
[1] 3

if может иметь форму if (condition) statement или if (condition) statement else other.statement, интерпретатор предполагает, что первая версия подразумевается, если оператор завершен после строки 2 - в интерактивном режиме он не может разумно ждать появления следующего else. Это отличается от кода source d - там ясно со следующей строкой, которая его образует.

Точки конца точки с запятой:

> if (TRUE) 1; else 3
[1] 1
Fehler: Unerwartete(s) 'else' in " else"  # error: unexpected 'else' in "else"

Но вы можете иметь только один оператор в каждой ветки условия.

> if (TRUE) 1; 2 else 3
[1] 1
Fehler: Unerwartete(s) 'else' in " 2 else" # error: unexpected 'else' in "2 else"

В фигурных скобках указывается оператор группы, поэтому они отображаются как один оператор.

> if (TRUE) {1; 2} else 3
[1] 2

Ответ 2

Вы должны использовать {}, чтобы оператор if имел более одной строки. Попробуйте следующее:

n<-857
while(n!=1){
  if(n<=0){
    print("please input a positive integer")
  }

  else if(n%%2==0){
    n<-n/2
    print(n)
  }
    else {
      n<-3*n+1
      print(n)
    }
}

Ответ 3

Чтобы сгруппировать утверждения, окружите их фигурными фигурными скобками, как вы это сделали с циклом while:

if(n<=0) {
     print("please input a positive integer")
} else if(n%%2==0) {
     n<-n/2
     print(n)
} else {
     n<-3*n+1
     print(n)
}

Это позволит вам разместить несколько операторов внутри if, else if и окончательного else.

Ответ 4

Когда-нибудь слышали о фигурных барах?

n<-857
while(n!=1){
    if(n<=0) {
        print("please input a positive integer")
    } else if(n%%2==0) {
        n<-n/2
        print(n)
    } else {
        n<-3*n+1
        print(n)
    }
}

Ответ 5

в то время как прямой ответ, как уже отмечалось, заключается в использовании фигурных скобок; стоит добавить, что вы можете интегрировать оператор присваивания <- во множество функций.

В вашем конкретном случае:

    print(n <- 3*n+1)

   ## instead of 
   #  n <- 3*n+1
   #  print(n)


Заметьте, что использование = здесь НЕ будет работать. Это должно быть <-