“else”错误中出现意外的“else”

问题描述 投票:0回答:4

我收到此错误:

错误:“else”中出现意外的“else”

从此

if, else
声明:

if (dsnt<0.05) {
     wilcox.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE) }
else {
      if (dst<0.05) {
wilcox.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE) }
   else {
         t.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE)       } }

这有什么问题吗?

r if-statement
4个回答
94
投票

您需要重新排列大括号。您的第一个语句已完成,因此 R 会按原样解释它并在其他行上产生语法错误。您的代码应如下所示:

if (dsnt<0.05) {
  wilcox.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE)
} else if (dst<0.05) {
  wilcox.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE)
} else {
  t.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE)       
} 

更简单地说,如果您有:

if(condition == TRUE) x <- TRUE
else x <- FALSE

然后 R 读取第一行,因为它是完整的,所以完整地运行它。当它到达下一行时,它会变成“Else?Else What?”因为这是一个全新的声明。要让 R 将 else 解释为前面 if 语句的一部分,您必须使用大括号来告诉 R 您尚未完成:

if(condition == TRUE) {x <- TRUE
 } else {x <- FALSE}

8
投票

我建议阅读一些语法。 看这里。

if (dsnt<0.05) {
  wilcox.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE) 
} else if (dst<0.05) {
    wilcox.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE)
} else 
  t.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE)

0
投票

我不喜欢大括号(我猜Python编程太多了)。我的解决方案就像简单的

if else

if(condition == TRUE) {x <- TRUE
 } else {x <- FALSE}

if(condition == TRUE) 
   x <- TRUE
else 
   x <- FALSE

够清楚了。


0
投票

我只是想补充一点,如果 if-else 子句由于某些原因位于 for 循环内,则不会发生这种情况。在 if 大括号和 else 之间可以有任意数量的空行。我理解这个解释,但我发现 R 不只是认为“哦,我认为该陈述是完整的,但由于下一个是“其他”,我想它不是”,这非常愚蠢,特别是因为这显然是它在for 循环。所以基本上我不能在每种情况下都按照我喜欢的方式设计代码,并且必须根据它是否在 for 循环中进行更改。

© www.soinside.com 2019 - 2024. All rights reserved.