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")
该语句不起作用。你能解释一下为什么 必须在同一行中的
else
或else if
之前吗?有没有其他方法可以在 R 中编写 if-else if-else 语句,尤其是不带括号的?
【问题讨论】:
当初始if
后跟一个复合表达式(由
对指示)时,默认情况下解析器会期望 else
后跟的表达式也是复合表达式。 else
的唯一定义用途是复合表达式。这甚至在文档中都有说明:if(cond) cons.expr else alt.expr
其中cons.expr
和alt.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是否在不加花括号的情况下也是一个复合语句