En essayant ?max
, vous verrez qu'il a en fait un na.rm =
argument, défini par défaut sur FALSE
. (C'est la valeur par défaut commun pour de nombreuses autres fonctions de R, y compris sum()
, mean()
, etc.)
Le réglage na.rm=TRUE
fait exactement ce que vous demandez:
d <- c(1, 100, NA, 10)
max(d, na.rm=TRUE)
Si vous souhaitez supprimer tous les NA
s, utilisez plutôt cet idiome:
d <- d[!is.na(d)]
Une dernière note: D' autres fonctions (par exemple table()
, lm()
et sort()
) ont des NA
arguments qui utilisent des noms concernant la PI (différents et offrent des options différentes). Donc, si cela NA
vous pose des problèmes lors d'un appel de fonction, il vaut la peine de rechercher une solution intégrée parmi les arguments de la fonction. J'ai trouvé qu'il y en a généralement un déjà là.
-Inf
pour und
de tous les NA.max()
se comporte (comme, par exemple, quand elle le faitmax(c(NA, NA)
). Personnellement, je pense que son comportement est raisonnable; Je pense qu'il a été construit de cette façon pour que vous obteniez le résultat attendu lorsque vous faites des choses commea <- c(NA, NA); b <- 1:4; max(c(max(a, na.rm = TRUE), max(b, na.rm = TRUE)))
NA
gestion de type R dans l'excellent package NumPy de Python .)NA
s d'un vecteur deNA
s, vous vous attendez à un vecteur vide, et non à -∞.La
na.omit
fonction est ce que beaucoup de routines de régression utilisent en interne:la source
?max
vous montre qu'il existe un paramètre supplémentairena.rm
que vous pouvez définirTRUE
.En dehors de cela, si vous voulez vraiment supprimer les
NA
s, utilisez simplement quelque chose comme:la source
na.omit
également une méthode dataframe, c'est donc plus général.Vous pouvez appeler
max(vector, na.rm = TRUE)
. Plus généralement, vous pouvez utiliser lana.omit()
fonction.la source
Juste au cas où quelqu'un de nouveau chez R voudrait une réponse simplifiée à la question d'origine
C'est ici:
Supposons que vous ayez un vecteur
foo
comme suit:courir
length(foo)
donne 22.length(nona_foo)
est 21, car les valeurs NA ont été supprimées.Remember
is.na(foo)
renvoie une matrice booléenne, donc l'indexationfoo
avec l'opposé de cette valeur vous donnera tous les éléments qui ne sont pas NA.la source
Utilisation
discard
de purrr (fonctionne avec des listes et des vecteurs).L'avantage est qu'il est facile d'utiliser des tuyaux; utilisez également la fonction de sous-ensemble intégrée
[
:Notez que
na.omit
cela ne fonctionne pas sur les listes:la source
J'ai effectué un test rapide comparant les deux
base
approches et il s'avère quex[!is.na(x)]
c'est plus rapide quena.omit
. L'utilisateur aqwr
suggéré d'essayerpurrr::dicard
également - cela s'est avéré être beaucoup plus lent (même si je serai ravi de prendre connaissance des commentaires sur ma mise en œuvre et mon test!)Pour référence, voici le test original de
x[!is.na(x)]
vsna.omit
:la source
purrr:discard