web-dev-qa-db-fra.com

Erreur 'else' inattendue dans "else"

Je reçois cette erreur:

Erreur: 'else' inattendu dans "else"

De cette déclaration 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)       } }

Quel est le probleme avec ca?

52
Lucia

Vous devez réorganiser vos accolades. Votre première déclaration est terminée, donc R l'interprète comme telle et produit des erreurs de syntaxe sur les autres lignes. Votre code devrait ressembler à:

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

Pour le dire plus simplement, si vous avez:

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

Ensuite, R lit la première ligne et, comme elle est complète, l’exécute dans son intégralité. Quand il arrive à la ligne suivante, cela devient "Else? Else quoi?" parce que c'est une déclaration complètement nouvelle. Pour que R interprète l'option else dans la déclaration if précédente, vous devez placer des accolades pour indiquer à R que vous n'êtes pas encore fini:

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

Je suggère de lire un peu sur la syntaxe. Voir ici.

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