Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 为什么没有括号的if-else语句有时有效,有时无效?_R - Fatal编程技术网

R 为什么没有括号的if-else语句有时有效,有时无效?

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语句

我现在糊涂了!首先,我知道这在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语句不在块中时,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")
  }
}