if - else if - else语句和括号

时间:2014-09-17 08:05:43

标签: r

我理解编写“if - else if”语句的常用方法如下:

if (2==1) {
  print("1")
} else if (2==2) {
  print("2")
} else {
  print("3")
}

if (2==1) {print("1") 
} else if (2==2) {print("2")
} else print("3")

相反,如果我这样写的话

if (2==1) {
  print("1")
} 
else if (2==2) {
  print("2")
}
else (print("3"))

或者这样:

if (2==1) print("1") 
else if (2==2) print("2")
else print("3")

该声明不起作用。你能解释一下为什么}必须在同一行的elseelse if之前?是否还有其他方法在R中编写if-else if-else语句,尤其是没有括号?

5 个答案:

答案 0 :(得分:31)

R逐行读取这些命令,因此它认为在if语句之后执行表达式之后你已经完成了。请注意,您可以使用if ,无需添加else

你的第三个例子将在一个函数中起作用,因为整个函数在被执行之前被定义,所以R 知道它还没有完成(在if() do之后)。< / p>

答案 1 :(得分:13)

在R中,我们还有 ifelse()功能:

<h1>A Web Page</h1>
<p id="demo">A Paragraph</p>

输出:

ifelse(1 < 0, "hello", "hi")

答案 2 :(得分:2)

正如hrbrmstr提到的那样:

  

当初始if后面跟着一个复合表达式(表示为   {}对)默认情况下,解析器会期望表达式   其次是其他化合物。唯一定义的使用else   是复合表达式。

if(cond) cons.expr else alt.expr语句中,else需要放在与`cons.expr&#39;结尾相同的行之后。化合物

因此,如果您想让代码在没有括号的情况下更好看,请采用以下方式:

if (2==1) print("1") else 
   if (2==2) print("2") else 
      print("3")

答案 3 :(得分:0)

ifelse具有树参数,第一个条件,第二个真结果和最后一个假结果。

y_pred = ifelse(prob_predict > 0.5,1,0)

答案 4 :(得分:-3)

当有嵌套ifs时,最好使用大括号。例如,在

if(n>0)
    if(a>b)
        z=a;
    else
        z=b;

如果不是if(n> 0),则else与内部相关。如果这不是您想要的,必须使用大括号来强制正确关联:

if(n>0){
    if(a>b)
        z=a;
}
else
    z=b;

有关详细信息,请参阅一个非常好的完整教程:Conditional statements: if-else, else-if and switch in C !希望这对您有所帮助!