R の ifelse 文はなぜベクトルを返せないのでしょうか? 質問する

R の ifelse 文はなぜベクトルを返せないのでしょうか? 質問する

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

これは私の給料では手に負えないデザイン選択でしょうか?

ベストアンサー1

州のドキュメントifelse:

ifelseの要素が か かに応じて、またはからtest選択された要素で埋められたと同じ形状の値を返します。yesnotestTRUEFALSE

長さ 1 のテスト値を渡すので、長さ 1 の結果が取得されます。より長いテスト ベクトルを渡すと、より長い結果が取得されます。

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

したがって、ブール値のベクトルをテストし、(ベクトル)と引数ifelseから取得した要素で埋められた同じ長さのベクトルを返すという特定の目的のために設計されています。yesno

関数の名前が原因で、実際には通常のif () {} else {}構築が必要なときにこれを使用することはよくある混乱です。

おすすめ記事