如果R中的语句只能有一行?

tf7tbtn2  于 2023-05-04  发布在  其他
关注(0)|答案(6)|浏览(135)

我在尝试一个用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的值,又想显示它,我该怎么办?非常感谢

dpiehjr4

dpiehjr41#

准确地说,这不是关于行,而是关于 * 语句 *。您可以在一行中包含整个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) statementif (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
q35jwt9p

q35jwt9p2#

要对语句进行分组,请使用花括号将它们括起来,就像您对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)
}

这将允许您在ifelse if和最后的else中放置多个语句。

cxfofazt

cxfofazt3#

您必须使用{}来允许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)
    }
}
nbysray5

nbysray54#

而直接的答案是,正如已经指出的,使用花括号;
值得补充的是,您可以将<-赋值运算符集成到许多函数中。
在您的具体案例中:

print(n <- 3*n+1)

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

注意,在这里使用=将 * 不 * 工作。必须是<-

nqwrtyyt

nqwrtyyt5#

  • 是的,您可以使用花括号为每个条件语句包含多个语句:*
if (condition){
    statement 1
    print()
}
else{
    statement 2 
    print()
}
  • 添加:* 如果你想在一行中只使用if和else语句,你可以使用这个:
ifelse(condition, statement1, statement2)
olqngx59

olqngx596#

听说过卷发棒吗?

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)
    }
}

相关问题