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