我正在用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的值,但也想要显示它,我该怎么办?非常感谢你
答案 0 :(得分:40)
确切地说,这不是关于行而是关于语句。您可以将整个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"
使用curly括起组语句,使它们显示为一个语句。
> if (TRUE) {1; 2} else 3
[1] 2
答案 1 :(得分:12)
您必须使用{}
来允许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)
}
}
答案 2 :(得分:10)
要对语句进行分组,请使用大括号括起它们,就像使用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
内放置多个语句。
答案 3 :(得分:1)
虽然正如已经指出的那样直接回答是使用花括号;
值得补充的是,您可以将<-
赋值运算符集成到许多函数中。
在您的具体案例中:
print(n <- 3*n+1)
## instead of
# n <- 3*n+1
# print(n)
<小时/>
请注意,在此处使用=
将 NOT 工作。必须是<-
答案 4 :(得分:0)
有没有听说过卷曲的栏杆?
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)
}
}