Erreur “inattendue” dans “sinon”

Je reçois cette erreur:

Erreur: inattendu “else” 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?

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

 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, elle s'exécute dans son intégralité. Quand il arrive à la ligne suivante, il dit "Sinon? Sinon?" parce que c'est une déclaration complètement nouvelle. Pour que R interprète le rest comme faisant partie de l'instruction if précédente, vous devez avoir des accolades pour indiquer à R que vous n'êtes pas encore terminé:

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

Je suggère de lire un peu la syntaxe. Vois 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)