Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.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 if-else语句和括号_R_If Statement - Fatal编程技术网

R if-else if-else语句和括号

R if-else if-else语句和括号,r,if-statement,R,If Statement,我理解编写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

我理解编写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之前?有没有其他方法可以在R中编写if-else-if-else语句,尤其是不带括号的语句?

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

您的第三个示例将在函数中工作,因为整个函数是在执行之前定义的,因此R知道在if do之后它还没有完成。

在R中,我们还有ifelse函数:

ifelse(1 < 0, "hello", "hi")
如前所述:

当初始if后面跟着一个复合表达式时,表示为 默认情况下,解析器的{}对将使用表达式 其次是else,也是复合词。else的唯一定义用法 是复合表达式

在语句ifcond cons.expr else alt.expr中,需要将else放在“cons.expr”复合词的后面,并与之对齐

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

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")

ifelse具有树参数、第一个条件、第二个true结果和最后一个false结果

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

我在函数中尝试了它,我的第3个和第4个示例都在函数中工作。Thankst这在R-inferno,8.1.43节btw中提到。当初始if后面跟一个由{}对表示的复合表达式时,默认情况下,解析器会期望后面跟else的表达式也是复合表达式。else的唯一定义用法是与复合表达式一起使用。这甚至在文档中有说明:ifcond cons.expr else alt.expr,其中cons.expr和alt.expr被定义为复合。正如@Berry所指出的,您可以使用R解析函数定义的方式来解决这个问题,但最好在括号中使用IMO保持一致。此外,如果您将不寻常的if-else包装在括号{bad if-else expr}中,或者在更常见的函数{bad if-else expr}中,很遗憾,RStudio中的“重新格式化代码”没有将else格式化到正确的位置。它可以看到这个问题,伊姆霍。