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
選択された要素で埋められたと同じ形状の値を返します。yes
no
test
TRUE
FALSE
長さ 1 のテスト値を渡すので、長さ 1 の結果が取得されます。より長いテスト ベクトルを渡すと、より長い結果が取得されます。
> ifelse(c(TRUE, FALSE), c(1, 2), c(3, 4))
[1] 1 4
したがって、ブール値のベクトルをテストし、(ベクトル)と引数ifelse
から取得した要素で埋められた同じ長さのベクトルを返すという特定の目的のために設計されています。yes
no
関数の名前が原因で、実際には通常のif () {} else {}
構築が必要なときにこれを使用することはよくある混乱です。