2013-02-13 16 views
43

ottengo questo errore:imprevisto 'altro' in "altro" errore

Error: unexpected 'else' in " else"

Da questo if, else dichiarazione:

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

Cosa c'è di sbagliato in questo?

+2

L'istruzione if è completata dalla seconda riga. Sposta la parentesi graffa alla fine di essa all'inizio della terza linea. Fai lo stesso per il 5 °. –

+1

Possibile duplicato di http://stackoverflow.com/questions/13724063/if-else-constructs-inside-and-outside-functions –

risposta

6

Vorrei suggerire di leggere un po 'sulla sintassi. 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

Proprio quando pensavo di dover aggiungere il codice riscritto per essere bello, ho capito già la risposta è stato risposto da sebastian-c .. – nadizan

+1

Siamo spiacenti. Ho apprezzato il collegamento alla definizione della lingua, però. Risponde alla domanda. –

67

È necessario riorganizzare le parentesi graffe. La prima istruzione è completa, quindi R lo interpreta come tale e produce errori di sintassi sulle altre righe. Il codice dovrebbe essere simile:

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

Per dirla più semplicemente, se si dispone di:

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

Poi R legge la prima riga e perché è completo, corre, che nella sua interezza. Quando arriva alla riga successiva, va "Altrimenti? Altrimenti cosa?" perché è una dichiarazione completamente nuova. Per avere R interpretare il else come parte dell'istruzione if precedente, devi avere parentesi graffe per dire a R che non hai ancora finito:

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