if - else if - else 语句和括号

Posted

技术标签:

【中文标题】if - else if - else 语句和括号【英文标题】:if - else if - else statement and brackets 【发布时间】:2014-11-11 04:22:14 【问题描述】:

我理解写“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 语句,尤其是不带括号的?

【问题讨论】:

当初始 if 后跟一个复合表达式(由 对指示)时,默认情况下解析器会期望 else 后跟的表达式也是复合表达式。 else 的唯一定义用途是复合表达式。这甚至在文档中都有说明:if(cond) cons.expr else alt.expr 其中cons.expralt.expr 被定义为复合。正如@Berry 指出的那样,您可以使用 R 解析函数定义的方式来解决这个问题,但最好在括号使用中保持一致(IMO)。 如果你将不寻常的 if-else 括在括号 bad if-else expr 或更常见的函数 function() bad if-else expr 中,它也会起作用 Unexpected 'else' in "else" error的可能重复 我很遗憾“重新格式化代码”(在 RStudio 中)没有将 else 格式化到正确的位置。它可以看到这个问题,恕我直言。 【参考方案1】:

R 逐行读取这些命令,因此它认为您在执行 if 语句之后的表达式后就完成了。请记住,您可以使用if而不添加else

您的第三个示例将在函数中运行,因为整个函数在执行之前定义,所以 R 知道它还没有完成(在 if() do 之后)。

【讨论】:

我在一个函数中尝试过,我的第三个和第四个例子都在函数中工作。谢谢 这在 R-inferno 的第 8.1.43 节 btw 中有所提及。【参考方案2】:

在 R 中,我们也有 ifelse() 函数:

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

输出:

# [1] "hi"

【讨论】:

【参考方案3】:

正如hrbrmstr 所说:

当初始 if 后跟复合表达式时(由 对)默认情况下解析器将期望表达式 其次是 else 也是复合的。 else 的唯一定义使用 是复合表达式。

在语句if(cond) cons.expr else alt.expr 中,else 需要放在结尾的 `cons.expr' 复合词之后并与该复合词在同一行中。

所以如果你想让你的代码在没有括号的情况下看起来更好看,可以这样应用:

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于if - else if - else 语句和括号的主要内容,如果未能解决你的问题,请参考以下文章

在C语言中,if和else if是否在不加花括号的情况下也是一个复合语句

if-else语句中,if和else的配对原则各是啥

if else 逻辑关系问题

选择语句 if else

java if-else语句中的if条件后如果不加大括号能执行几句话?

java中那些情况使用if语句时可以不用else?