2017-09-06 6 views
1

Rのifelse(test, yes, no)関数で、異なる形状のベクトルをテストオブジェクトに返すベクトル化されたメカニズムがありますか?長さnのベクトルをベクトル化されたifelseで長さ1(またはテストとは異なる形状)のテストに戻しますか?

The function is designed to return objects of the same shape as the test object:

> ifelse(TRUE, c(1, 3), 7) 
[1] 1 

しかし、私たちが卑劣取得し、そのオブジェクトを割り当ててみても、単一の長さの名前が入力され、結果は同じである:

> x <- c(1,3) 
> ifelse(TRUE, x, 7) 
[1] 1 

不格好な制御構造は働く:

> if(TRUE){c(1,3)}else{7} 
[1] 1 3 

これを実現するベクター化された方法がありますか?

+1

以下のように答えます...あなたは 'list '、つまり' list(c(1,3))'でベクトルをラップすることができます。しかし、ポストに言及されているように、これは不器用です。 https://stackoverflow.com/questions/40340081/return-a-matrix-with-ifelse –

答えて

1

1)通常1は、ちょうどこのケースでは、プレーンifを使用している場合:

out <- if (TRUE) c(1, 3) else 7 
out 
## [1] 1 3 

2)検討する別の構造を置き換えるです:

replace(c(1, 3), !TRUE, 7) 
## [1] 1 3 

3)ifelse /リストあなたが本当にifelseを使用したい場合は、これが動作します:

ifelse(TRUE, list(c(1, 3)), list(7))[[1]] 
## [1] 1 3 
関連する問題