61

次のエラーが表示されます。

エラー: "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)       } }

これの何が問題なのですか?

4

2 に答える 2

90

中括弧を再配置する必要があります。最初のステートメントが完成したので、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 に else を前の if ステートメントの一部として解釈させるには、中括弧を使用して、まだ終了していないことを R に伝える必要があります。

if(condition == TRUE) {x <- TRUE
 } else {x <- FALSE}
于 2013-02-13T23:56:13.830 に答える
8

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

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)
于 2013-02-13T23:51:43.177 に答える