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=TRUEhace justo lo que estás pidiendo:
d <- c(1, 100, NA, 10)
max(d, na.rm=TRUE)
Si quieres eliminar todos los NAs, usa este modismo en su lugar:
d <- d[!is.na(d)]
Una nota final: Otras funciones (p table(). Ej . lm(), Y sort()) tienen NAargumentos relacionados que usan nombres diferentes (y ofrecen diferentes opciones). Entonces, si le NAcausa 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í.
-Infpor unadde 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)))NAinstalaciones de manejo tipo R en el excelente paquete NumPy de Python ).NAs de un vector deNAs, esperaría un vector vacío, no -∞.La
na.omitfunción es lo que muchas de las rutinas de regresión usan internamente:fuente
?maxle muestra que hay un parámetro adicionalna.rmque puede configurarTRUE.Aparte de eso, si realmente quieres eliminar el
NAs, solo usa algo como:fuente
na.omittambié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
foosiguiente 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 indexarfoocon el opuesto de este valor le dará todos los elementos que no son NA.fuente
Uso
discardde 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.omitno funciona en las listas:fuente
Ejecuté un punto de referencia rápido comparando los dos
baseenfoques y resulta quex[!is.na(x)]es más rápido quena.omit. El usuarioqwrsugirió que lo intentarapurrr::dicardtambié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