web-dev-qa-db-ja.com

「else」エラーの予期しない「else」

私はこのエラーを受け取ります:

エラー:「else」に予期しない「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)       } }

これの何が問題になっていますか?

50
Lucia

中括弧を再配置する必要があります。最初のステートメントは完了しているため、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は最初の行を読み取り、それが完全であるため、その全体を実行します。次の行に到達すると、「Else?Else what?」になります。それは完全に新しい声明だからです。 Rに先行するifステートメントの一部としてelseを解釈させるには、終了していないことをRに伝える中括弧が必要です。

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

構文について少し読むことをお勧めします。 こちらをご覧ください

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