ここでは簡単なクラスの質問がありますが、私は困惑しています。 ここでは、私はifelse
を使用することになっています。最初の数行は正常に機能しますが、私のx
が論理的な場合、関数はTRUE
を "White"という単語に、FALSE
を "Black"という単語に変換する必要があります。私は実行するたびにRは自分のオブジェクトが論理的でないと主張するのはなぜですか?
q5 <- function (x) {
ifelse (is.numeric (x),
(div_three <- which (x %% 3 == 0)) &
(not_div_three <- which (x %% 3 != 0)) &
(x [div_three] <- (x [div_three]/3)) &
(x [not_div_three] <- (x [not_div_three] * 2)),
ifelse (is.character (x),
stop ("Input is a character."),
ifelse (is.logical (x),
(is_true <- which (x == "TRUE")) &
(is_false <- which (x == "FALSE")) &
(x [is_true] <- "WHITE") &
(x [is_false] <- "FALSE"))))
x
}
はしかし、q5 (c(TRUE, TRUE, FALSE, TRUE, TRUE))
例えば、私はこのエラーを取得する:
Error in (is_true <- which(x == "TRUE")) & (is_false <- which(x == "FALSE")) & :
operations are possible only for numeric, logical or complex types
このベクターは間違いなく論理的です。単語を挿入する前にそれを文字に変えてみましたが、新しい要素を使ってみましたが、すべて同じです。 IDは、私の要素が実際に論理的であることを考えれば、このメッセージが何を意味するのかを理解する助けが大好きです。 ありがとうございました!
'を参照してください - ( "R" < x)が "R" と - あなたは、x <を実行してみることができます1& "WHITE") 'がそのエラーを投げると、今はifelseを放棄します。これはすでに読み込みとデバッグが難しいです。 – rawr
残念ながら、これは' ifelse'を使って行われることになっています。もちろん、私はそれがなくても簡単にできるのですが... –
'q5 < - Vectorize(function(x)ifelse(x)、ifelse(x %% 3 == 0、x * 2、x/ifelse(x、 'WHITE'、 'BLACK')、NA)))););););) q5(c(TRUE、TRUE、FALSE、TRUE、TRUE)) – rawr