Al intentarlo ?max
, verá que en realidad tiene un na.rm =
argumento, establecido de forma predeterminada en FALSE
. (Ese es el defecto común para muchas otras funciones, incluyendo R sum()
, mean()
, etc.)
La configuración na.rm=TRUE
hace justo lo que estás pidiendo:
d <- c(1, 100, NA, 10)
max(d, na.rm=TRUE)
Si quieres eliminar todos los NA
s, usa este modismo en su lugar:
d <- d[!is.na(d)]
Una nota final: Otras funciones (p table()
. Ej . lm()
, Y sort()
) tienen NA
argumentos relacionados que usan nombres diferentes (y ofrecen diferentes opciones). Entonces, si le NA
causa problemas en una llamada de función, vale la pena buscar una solución integrada entre los argumentos de la función. He descubierto que generalmente ya hay uno allí.
-Inf
por unad
de todas las AN.max()
comporta la función base R (como, por ejemplo, al hacerlomax(c(NA, NA)
). Personalmente, creo que su comportamiento es razonable; Espero que se haya construido de esa manera para que obtenga el resultado esperado al hacer cosas comoa <- c(NA, NA); b <- 1:4; max(c(max(a, na.rm = TRUE), max(b, na.rm = TRUE)))
NA
instalaciones de manejo tipo R en el excelente paquete NumPy de Python ).NA
s de un vector deNA
s, esperaría un vector vacío, no -∞.La
na.omit
función es lo que muchas de las rutinas de regresión usan internamente:fuente
?max
le muestra que hay un parámetro adicionalna.rm
que puede configurarTRUE
.Aparte de eso, si realmente quieres eliminar el
NA
s, solo usa algo como:fuente
na.omit
también tiene un método de marco de datos, por lo que es más general.Puede llamar
max(vector, na.rm = TRUE)
. De manera más general, puede usar lana.omit()
función.fuente
En caso de que alguien nuevo en R quiera una respuesta simplificada a la pregunta original
Aquí está:
Suponga que tiene un vector de la
foo
siguiente manera:correr
length(foo)
da 22.length(nona_foo)
es 21, porque los valores de NA se han eliminado.Recuerde que
is.na(foo)
devuelve una matriz booleana, por lo que indexarfoo
con el opuesto de este valor le dará todos los elementos que no son NA.fuente
Uso
discard
de purrr (funciona con listas y vectores).El beneficio es que es fácil usar tuberías; alternativamente, use la función de subconjunto incorporada
[
:Tenga en cuenta que
na.omit
no funciona en las listas:fuente
Ejecuté un punto de referencia rápido comparando los dos
base
enfoques y resulta quex[!is.na(x)]
es más rápido quena.omit
. El usuarioqwr
sugirió que lo intentarapurrr::dicard
también: resultó ser mucho más lento (¡aunque felizmente tomaré comentarios sobre mi implementación y prueba!)Como referencia, aquí está la prueba original de
x[!is.na(x)]
vsna.omit
:fuente
purrr:discard