In der if_else()
Funktion in dplyr
, it requires that both the if:TRUE and if:FALSE elements are of the same class.Spezifizieren Sie die Klasse der NA in R (für if_else, dplyr)
Ich möchte NA
von meiner if_else()
Anweisung zurückgeben.
Aber z.B.
if_else(mtcars$cyl > 5, NA, 1)
kehrt
Error:
false
has type 'double' not 'logical'
Weil einfach in NA
ist logisch, zu lesen, und 1 numerisch ist (double).
Wrapping as.numeric()
um die NA
funktioniert gut: z.B.
if_else(mtcars$cyl > 5, as.numeric(NA), 1)
kehrt
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
Als was ich hoffe.
Aber das fühlt sich irgendwie dumm/unnötig. Gibt es eine bessere Möglichkeit, NA
als "numerisch NA
" einzugeben, als es so zu verpacken?
Hinweis: Dies gilt nur für den strengeren dplyr::if_else
nicht base::ifelse
.
Alle Elemente in einem Atomvektor vom gleichen Typ sein müssen. NA ist standardmäßig logisch. Die Hadley-Funktion muss vor dem Ausführen nach dem gleichen Datentyp suchen, aber die Basis-R-Funktion erzwingt einfach die NA, um mit dem anderen Argument übereinzustimmen. Siehe die Hilfeseite '?" NA "für ein besseres Verständnis dessen, was mit der NA passiert. Überprüfen Sie auch die Ausgabe von 'ifelse (mtcars $ cyl> 5," this ", 1)'. – lmo