【问题标题】:Unexpected 'else' in "else" error“else”错误中出现意外的“else”
【发布时间】:2013-01-29 16:48:46
【问题描述】:

我收到此错误:

错误:“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


【解决方案1】:

您需要重新排列大括号。您的第一条语句已完成,因此 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}

【讨论】:

  • 奇怪的是,R 仅在 if 语句不在块内时才需要这个。在块内部,您可以自己编写else,R 将正确地将其与前面的if 关联。在一个街区之外,它不会。很奇怪。
  • 你是对的,但我不认为这很奇怪。当在一个块中时,R 可以向前看,看看接下来会发生什么,因为所有指令都是一次给出的,而在一行一行中,它没有办法向前看下一行。
【解决方案2】:

我建议阅读一下语法。 See here.

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)

【讨论】:

  • 就在我认为我应该添加重写的代码更好的时候,我意识到答案已经被 sebastian-c 回答了..
  • 很抱歉。不过,我确实很欣赏到语言定义的链接。它确实回答了这个问题。
猜你喜欢
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多