1. ホーム
  2. r

[解決済み] なぜRのifelse文はベクトルを返すことができないのですか?

2022-06-06 01:34:03

質問

Rのifelse文は結構便利だと思うことがあります。 例えば

ifelse(TRUE,1,2)
# [1] 1
ifelse(FALSE,1,2)
# [1] 2

しかし、以下のような挙動にやや困惑しています。

ifelse(TRUE,c(1,2),c(3,4))
# [1] 1
ifelse(FALSE,c(1,2),c(3,4))
# [1] 3

これは私の階級を超えたデザイン選択なのでしょうか?

どのように解決するのですか?

のドキュメントは ifelse にはこうあります。

ifelse と同じ形状の値を返します。 と同じ形状の値を返します。 test で埋め尽くされた のどちらかから選択された要素で埋め尽くされます。 yes または no のどちらかです。 の testTRUE または FALSE .

長さ1のテスト値を渡しているので、長さ1の結果が得られています。 より長いテストベクトルを渡せば、より長い結果が得られます。

> ifelse(c(TRUE, FALSE), c(1, 2), c(3, 4))
[1] 1 4

そこで ifelse はブール値のベクトルをテストし、同じ長さのベクトルを返すという特定の目的のために意図されています。 yesno という引数があります。

この関数の名前のせいで、本当は普通の if () {} else {} を作りたいのに、これを使うのはよくあることです。