Tentando ?max
, você verá que ele realmente tem um na.rm =
argumento, definido por padrão como FALSE
. (Esse é o padrão comum para muitas outras funções R incluindo sum()
, mean()
etc.)
A configuração na.rm=TRUE
faz exatamente o que você está pedindo:
d <- c(1, 100, NA, 10)
max(d, na.rm=TRUE)
Se você deseja remover todos os NA
s, use este idioma:
d <- d[!is.na(d)]
Uma nota final: Outras funções (por exemplo table()
, lm()
e sort()
) tem NA
argumentos relacionados com que usam nomes diferentes (e oferecem diferentes opções). Portanto, se NA
você causar problemas em uma chamada de função, vale a pena procurar uma solução interna entre os argumentos da função. Eu descobri que geralmente há um já lá.
-Inf
parad
todas as NAs.max()
se comporta (como, por exemplo, ao fazermax(c(NA, NA)
). Pessoalmente, acho que seu comportamento é razoável; Espero que ele foi construído dessa maneira para que você obtenha o resultado esperado quando fazendo coisas comoa <- c(NA, NA); b <- 1:4; max(c(max(a, na.rm = TRUE), max(b, na.rm = TRUE)))
NA
instalações de manipulação do tipo R no excelente pacote NumPy do Python .)NA
s de um vetor deNA
s, esperaria um vetor vazio, não -∞.A
na.omit
função é o que muitas das rotinas de regressão usam internamente:fonte
?max
mostra que há um parâmetro extrana.rm
que você pode definirTRUE
.Além disso, se você realmente deseja remover os
NA
s, use algo como:fonte
na.omit
também tem um método de quadro de dados, por isso é mais geral.Você pode ligar
max(vector, na.rm = TRUE)
. De maneira mais geral, você pode usar ana.omit()
funçãofonte
Apenas no caso de alguém novo em R querer uma resposta simplificada para a pergunta original
Aqui está:
Suponha que você tenha um vetor da
foo
seguinte maneira:correr
length(foo)
dá 22.length(nona_foo)
é 21, porque os valores de NA foram removidos.Remember
is.na(foo)
retorna uma matriz booleana; portanto, a indexaçãofoo
com o oposto desse valor fornecerá todos os elementos que não são NA.fonte
Use
discard
from purrr (funciona com listas e vetores).O benefício é que é fácil usar canos; alternativamente, use a função de subconjunto integrada
[
:Observe que
na.omit
não funciona em listas:fonte
Fiz um rápido benchmark comparando as duas
base
abordagens e,x[!is.na(x)]
mais rápido do quena.omit
. O usuárioqwr
sugeriu que eu tentassepurrr::dicard
também - isso acabou sendo muito mais lento (embora eu tenha prazer em fazer comentários sobre minha implementação e teste!)Para referência, aqui está o teste original de
x[!is.na(x)]
vsna.omit
:fonte
purrr:discard