2017-08-31 11 views
0

if_else()の機能では、dplyrの場合はit requires that both the if:TRUE and if:FALSE elements are of the same classになります。RでのNAのクラスを指定します(if_else、dplyrの場合)

NAif_else()から返信します。

if_else(mtcars$cyl > 5, NA, 1) 

戻り

Error: false has type 'double' not 'logical'

単にNAに読み取ること論理的であり、そして1(ダブル)の数値であるため。

NAの周りにas.numeric()ラップを配置してください。

if_else(mtcars$cyl > 5, as.numeric(NA), 1) 

戻り私は期待しています何として

1 NA NA 1 NA NA NA NA 1 1 NA NA NA NA NA NA NA NA 1 1 1 1 NA NA NA NA 1 1 1 NA NA NA 1

しかし、これはちょっと愚か/不要です。 を「数値NA」と入力すると、このように入力する方が良いでしょうか?

NBこれは、より厳しいdplyr::if_elseではなく、base::ifelseにのみ適用されます。

+0

基本機能を試してみてください。 NAはデフォルトでは論理的です。 Hadleyの関数は、実行する前に同じデータ型をチェックする必要がありますが、基底R関数はNAを他の引数に適合させるだけです。 NAで何が起こっているのかをよりよく理解するには、ヘルプページ '?" NA ""を参照してください。また、 'ifelse(mtcars $ cyl> 5、" this "、1)'の出力を調べてください。 – lmo

答えて

3

あなたはNA_real_

if_else(mtcars$cyl > 5, NA_real_, 1) 
2

を使用することができますが、原子のベクトルのすべての要素が同じ型でなければならない

ifelse(mtcars$cyl > 5, NA, 1) 
+0

はい、ありがとう、編集を参照してください、私はこの動作を理解することにもっと興味を持っています。 –

関連する問題