R 为什么没有括号的if-else语句有时有效,有时无效?
我现在糊涂了!首先,我知道这在R中是不可能的,但我经常忘记它,有时它会起作用。然后它就不工作了!我开始识别模式-它在for循环或另一个block语句中工作,但不在外部工作:R 为什么没有括号的if-else语句有时有效,有时无效?,r,R,我现在糊涂了!首先,我知道这在R中是不可能的,但我经常忘记它,有时它会起作用。然后它就不工作了!我开始识别模式-它在for循环或另一个block语句中工作,但不在外部工作: for (i in 1:10) { if (0) a <- 1 else a <- 2 b <- 3 } for(1:10中的i){ 如果(0) A. 有什么解释吗 这里的简短回答是,您需要使用括号或将else子句与if放在同一行上 当if语句
for (i in 1:10) {
if (0)
a <- 1
else
a <- 2
b <- 3
}
for(1:10中的i){
如果(0)
A.
有什么解释吗
这里的简短回答是,您需要使用括号或将else
子句与if
放在同一行上
当if语句不在块中时,else(如果存在)必须
与语句2的结尾显示在同一行。否则,新的
语句2末尾的行完成if并生成一个
经过计算的语法完整的语句
因此,您可以使用:
for (i in 1:10) {
if (0) {
a <- 1
}
else {
a <- 2
}
b <- 3
}
for(1:10中的i){
如果(0){
a如果将整个“if”语句括在花括号中(如在函数体中),则不需要将“else”与“if”的结束括号放在同一行
此代码产生语法错误:
a <- 1
if (a >1)
{
print("a is greater than 1")
}
else
{
print ("a is not greater than 1")
}
a1)
{
打印(“a大于1”)
}
其他的
{
打印(“a不大于1”)
}
但这并不是因为增加了第一个和最后一个括号:
{
a <- 1
if (a >1)
{
print("a is greater than 1")
}
else
{
print ("a is not greater than 1")
}
}
{
a(1)
{
打印(“a大于1”)
}
其他的
{
打印(“a不大于1”)
}
}
我想对问题的“为什么”部分做出贡献——为什么有两种不同的可能性
hrbrmstr在本节中陈述了以下内容
当初始if后面跟一个复合表达式(由{}对表示)时,默认情况下解析器会期望后面跟else的表达式也是复合表达式。else的唯一定义用法是与复合表达式一起使用。这甚至在文档中有说明:if(cond)cons.expr else alt.expr,其中cons.expr和alt.expr被定义为复合。正如@Berry所指出的,您可以使用R解析函数定义的方式来解决这个问题,但最好在括号中保持一致(IMO)
Berry Boessenkool写道:
R逐行读取这些命令,因此它认为您在执行if语句后的表达式后就完成了。请记住,您可以使用if而不添加else
@ZheyuanLi这不是一个复制人,他们甚至没有谈论没有括号的变体,这是我问题的核心。他们在谈论换行的必要性。@ZheyuanLi man,我不知道你在说什么。这是一个不同的问题。可能是因为R解析器的同一部分,但我看不到那么远。这运行一段代码和逐行运行代码之间有什么区别,是吗?很抱歉,可能是重复的,我不明白你的答案。你如何解释if语句在for循环外部或内部的区别?哎呀,很抱歉--错过了for
方面的。请在语句后添加分号以分隔它们。我也会更新答案。我喜欢这个答案,因为它消除了<代码>对<代码>的干扰,直截了当。我看不清楚这个问题。你能解释一下“复合表达式”的含义吗?它与此有什么关系?
a <- 1
if (a >1)
{
print("a is greater than 1")
}
else
{
print ("a is not greater than 1")
}
{
a <- 1
if (a >1)
{
print("a is greater than 1")
}
else
{
print ("a is not greater than 1")
}
}