2013-02-13 35 views
43

我得到這個錯誤:意外的 '其他' 中的 「其他」 錯誤

Error: unexpected 'else' in " 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)  } } 

有什麼不對呢?

+2

您的if語句在第二行完成。將大括號移動到第三行的開頭。爲第五名做同樣的事情。 – 2013-02-13 23:50:43

+1

可能重複的http://stackoverflow.com/questions/13724063/if-else-constructs-inside-and-outside-functions – 2013-02-14 10:49:20

回答

6

我建議閱讀一下語法。 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) 
+0

正當我想我應該添加重寫的代碼很好,我意識到答案已經已被sebastian-c回答.. – nadizan 2013-02-14 00:07:01

+1

對不起。不過,我很欣賞鏈接到語言定義。它確實回答了這個問題。 – 2013-02-14 00:17:08

67

您需要重新排列大括號。你的第一個陳述是完整的,所以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讀取第一行,因爲它是完整的,運行在其全部。當它到達下一行時,它會變成「其他?否則呢?」因爲這是一個全新的說法。要讓R將else解釋爲前面if語句的一部分,必須使用大括號來告訴R您尚未完成:

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