2013-02-13 9 views
43

otrzymuję ten błąd:Unexpected 'inny' w "inny" Błąd

Error: unexpected 'else' in " else"

z tego rachunku: 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)  } } 

Co jest nie tak z tym?

+2

Twoja instrukcja if jest uzupełniona drugim wierszem. Przesuń nawias klamrowy na jego końcu do początku trzeciej linii. Zrób to samo dla piątego. –

+1

Możliwy duplikat http://stackoverflow.com/questions/13724063/if-else-constructs-inside-and-outside-functions –

Odpowiedz

6

Proponuję przeczytać nieco o składni. 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

Właśnie wtedy, gdy pomyślałem, że powinienem dodać przepisany kod, aby był miły, zdałem sobie sprawę, że już odpowiedź odpowiedział sebastian-c .. – nadizan

+1

Przepraszam za to. Doceniłem jednak link do definicji języka. To odpowiada na pytanie. –

67

Musisz zmienić kolejność nawiasów klamrowych. Twoje pierwsze zdanie jest kompletne, więc R interpretuje je jako takie i tworzy błędy składniowe na innych liniach. Kod powinien wyglądać następująco:

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

Mówiąc prościej, jeśli masz:

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

Wtedy R odczytuje pierwszą linię i dlatego, że jest kompletna, że ​​biegnie w całości. Kiedy dojdzie do następnej linii, to idzie "Else? Else co?" ponieważ jest to całkowicie nowe stwierdzenie. Aby R interpretował inne jako część poprzedniej instrukcji if, musisz mieć nawiasy klamrowe, aby powiedzieć R, że jeszcze nie skończyłeś:

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