0

私は次のコードを持っています:

a=2 

if (length(a)>1){
b<<-rowSums(c[,-(1:2)][,c(T,F)]) }

else {b<<-sum(c[seq(3,length(x),2)]) }

次のエラーが発生します。

Error: unexpected 'else' in "    else"

なぜこのメッセージが表示されるのかわかりません。何か案は?

4

3 に答える 3

1

Rの定義では:

ifステートメントがブロック内にない場合、elseが存在する場合は、statement2の終わりと同じ行に表示する必要があります。それ以外の場合、statement2の最後の改行はifを完了し、評価される構文的に完全なステートメントを生成します。簡単な解決策は、中括弧で囲まれた複合ステートメントを使用し、ステートメントの終わりを示す閉じ中括弧と同じ行にelseを配置することです。

R言語定義

したがって、「else」は「}」と同じ行にある必要があります。また

a=2 

if (length(a)>1){
b<<-rowSums(c[,-(1:2)][,c(T,F)]) } else {b<<-sum(c[seq(3,length(x),2)]) }

また

a=2 

if (length(a)>1){
b<<-rowSums(c[,-(1:2)][,c(T,F)]) 
} else {b<<-sum(c[seq(3,length(x),2)]) }

しかし、それでも悪いコード/インデントパターンです。私は次のようなものを試してみます

a=2 

if (length(a)>1) {
    b<<-rowSums(c[,-(1:2)][,c(T,F)]) 
} else {
    b<<-sum(c[seq(3,length(x),2)]) 
}

それ以上の間違い、または提案された「ifelse」関数を回避するため。

于 2013-01-18T17:13:57.500 に答える
1

私はあなたが探していると思います

ifelse(expr, if-case, else-case)

実際には、ifが実行されてから、「else」を書き込もうとしているようです(ただし、ifはありません)。このコードをシェルで実行していますか、それともテキストファイルで記述されていますか?

編集(説明):

x <- 1
b <- ifelse(x == 1, 1,2)
cat(b,"\n")
[1] 1

したがって、x == 1の場合、bは1を取得し、それ以外の場合は2を取得します。「1」と「2」は関数または任意の値と交換できます。

于 2013-01-18T16:56:01.197 に答える
1

@joranがコメントで指摘したように、当面の問題を解決するには、ステートメントの}末尾を。ifと同じ行にする必要がありますelse

a <- FALSE

if (a) {
    print("a is true")
} else {  ## Works
    print("a is false")
}

if (a) {
    print("a is true")
} ## Doesn't work
else {
    print("a is false")
}

行が終了し、ステートメントが終了する可能性がある場合、Rはそのステートメントに関連するより多くの入力を期待しなくなります。これは同じ理由です

1 +
2

3を与えますが

1
+ 2

しません。

また、を再考することを強くお勧めします<<-。Rでは、関数が単に物事を変更するよりも、物事を返す方がはるかに優れています。参照:なぜ `<<-`を使用するのが眉をひそめているのですか?どうすればそれを回避できますか?

于 2013-01-18T17:18:30.923 に答える