Попробовав ?max
, вы увидите, что у него действительно есть na.rm =
аргумент, установленный по умолчанию в FALSE
. (Это стандартное значение по умолчанию для многих других функций R, включая sum()
, mean()
и т. Д.)
Установка na.rm=TRUE
делает только то, что вы просите:
d <- c(1, 100, NA, 10)
max(d, na.rm=TRUE)
Если вы хотите удалить все NA
s, используйте вместо этого эту идиому:
d <- d[!is.na(d)]
Последнее замечание: другие функции (например table()
, lm()
и sort()
) имеют NA
связанные аргументы, которые используют разные имена (и предлагают разные варианты). Поэтому, если у NA
вас проблемы с вызовом функции, стоит проверить наличие встроенного решения среди аргументов функции. Я обнаружил, что обычно он там уже есть.
-Inf
дляd
всех НС.max()
ведет себя функция base R (как, например, при выполненииmax(c(NA, NA)
). Лично я думаю, что его поведение разумно; Я ожидаю, что он был построен таким образом, чтобы вы получили ожидаемый результат при выполнении таких вещей, какa <- c(NA, NA); b <- 1:4; max(c(max(a, na.rm = TRUE), max(b, na.rm = TRUE)))
NA
в превосходный пакет Python NumPy .)NA
s из вектораNA
s, вы ожидаете пустой вектор, а не -∞.Эта
na.omit
функция используется многими внутренними процедурами регрессии:источник
?max
показывает, что есть дополнительный параметр,na.rm
который вы можете установитьTRUE
.Кроме того, если вы действительно хотите удалить
NA
s, просто используйте что-то вроде:источник
na.omit
также есть метод dataframe, поэтому является более общим.Вы можете позвонить
max(vector, na.rm = TRUE)
. В более общем смысле, вы можете использоватьna.omit()
функцию.источник
На всякий случай, если кто-то новичок в R хочет получить упрощенный ответ на оригинальный вопрос
Вот:
Предположим, у вас есть вектор
foo
следующим образом:Бег
length(foo)
дает 22.length(nona_foo)
21, потому что значения NA были удалены.Помните,
is.na(foo)
возвращает булеву матрицу, поэтому индексированиеfoo
с обратным значением даст вам все элементы, которые не являются NA.источник
Использование
discard
от purrr (работает со списками и векторами).Преимущество заключается в простоте использования труб; в качестве альтернативы используйте встроенную функцию поднабора
[
:Обратите внимание, что
na.omit
не работает со списками:источник
Я провел быстрый тест, сравнивая два
base
подхода, и оказалось, чтоx[!is.na(x)]
он быстрее, чемna.omit
. Пользовательqwr
предложилpurrr::dicard
также попробовать - это оказалось намного медленнее (хотя я с радостью прокомментирую мою реализацию и тест!)Для справки вот оригинальный тест
x[!is.na(x)]
противna.omit
:источник
purrr:discard