25

我正在尝试一个带有 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的值,但也想显示它,我该怎么办?非常感谢你

4

6 回答 6

56

准确地说,这不是关于行,而是关于语句。您可以将整个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如果语句在第 2 行之后完成if (condition) statementif (condition) statement else other.statement则解释器假定第一个版本是指第一个版本 - 在交互模式下,它不能明智地等待else下一个是否出现。这在sourced 代码中是不同的 - 下一行很清楚它是哪种形式。

分号也结束语句:

> 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
于 2013-03-23T13:38:08.450 回答
13

您必须使用{}for 允许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)
    }
}
于 2013-03-23T12:08:32.737 回答
11

要对语句进行分组,请用花括号将它们括起来,就像您对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这将允许您在、 theelse if和 final中放置多个语句else

于 2013-03-23T12:08:28.910 回答
1

如前所述,直接的答案是使用花括号;
值得补充的是,您可以将<-赋值运算符集成到许多函数中。

在您的具体情况下:

    print(n <- 3*n+1)

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


请注意,=在这里使用将不起作用。一定是<-

于 2013-03-23T13:37:41.500 回答
0

是的,您可以使用花括号为每个条件语句包含多个语句:

if (condition){
    statement 1
    print()
}
else{
    statement 2 
    print()
} 

另外:如果你只想在一行中使用 if 和 else 语句,你可以使用这个:

ifelse(condition, statement1, statement2)
于 2021-12-25T19:55:02.517 回答
-1

听说过卷曲的barces吗?

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)
    }
}
于 2013-03-23T12:09:23.903 回答