2017-08-31 56 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)

我希望從我的if_else()聲明中返回NA

但是,例如,

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

返回

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

由於只需在NA讀取是合乎邏輯的,而1是數字(雙)。

包裝as.numeric()圍繞NA工作正常:

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作爲「數字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

是的,我知道,謝謝,看看編輯,我對理解這種行爲更感興趣,而不是解決它。 –