私は次のコードを持っています:
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"
なぜこのメッセージが表示されるのかわかりません。何か案は?
私は次のコードを持っています:
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"
なぜこのメッセージが表示されるのかわかりません。何か案は?
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」関数を回避するため。
私はあなたが探していると思います
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」は関数または任意の値と交換できます。
@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では、関数が単に物事を変更するよりも、物事を返す方がはるかに優れています。参照:なぜ `<<-`を使用するのが眉をひそめているのですか?どうすればそれを回避できますか?