В документации NA определяется как:
NA - логическая константа длины 1, которая содержит индикатор отсутствующего значения. NA может быть приведен к любому другому векторному типу, кроме raw. Существуют также константы NA_integer_, NA_real_, NA_complex_ и NA_character_ других векторных типов atomi c, которые поддерживают отсутствующие значения
Проще говоря, они просто говорят вам, что значение отсутствует. Тип NA
является логическим, а c вы можете определить по:
typeof(NA)
#> [1] "logical"
Создано 19.06.2020 с помощью пакета реплекс (v0. 3.0)
Обратите внимание, это не означает, что отсутствующее значение имеет тип логического. Это может быть любой тип, в конце концов, он отсутствует.
Вычисления с NA
обычно возвращают NA
(за исключением некоторых случаев).
Математика с NA
Числа c вычисления с NA
обычно возвращают NA
.
NA + 1
#> [1] NA
Создано 19.06.2020 с помощью пакета REPEX (v0.3.0)
Но не NA^0
NA^0
#> [1] 1
Создано 19.06.2020 пакетом REPEX (v0.3.0)
Чтобы лучше понять это, нужно помнить одну вещь в R: все, что происходит в R, является функциональным вызовом. Таким образом, вы можете переписать приведенное выше следующим образом.
`^`(NA,0)
#> [1] 1
Базовые функции (обычно), пытается принудить один вектор atomi c к другому, если в случае, если они имеют разный тип. Один из примеров этого приведен ниже, в котором LHS 1, который имеет тип numeri c, приводится к символьному типу.
1 == "1"
#> [1] TRUE
Создано 19.06.2020 Пакет (v0.3.0)
Когда это происходит, NA
приводится к NA_ineger_
, а затем становится идентификатором, т.е. любое число, возведенное в степень нуля, равно 1. Как и ожидалось, при попытке NA_character_
выдается ошибка.
NA_integer_^0
#> [1] 1
NA_real_^0
#> [1] 1
NA_complex_^0
#> [1] 1+0i
NA_character_^0
#> Error in NA_character_^0: non-numeric argument to binary operator
Создано 19.06.2020 пакетом REPEX (v0.3.0)
Логика с NA
Часто мы хотим проверить, является ли конкретная переменная (скажем, x
) NA
или нет, и интуитивно мы запускаем следующее, ожидая, что она вернется ИСТИНА или ЛОЖЬ.
x == NA
#> NA
Создано 2020-06-19 пакетом REPEX (v0.3.0)
Это может кажется неожиданным, но это имеет смысл, поскольку x
может быть чем угодно (например, вектором, NA, целым числом и т. д. c), поэтому результат неоднозначен. Далее возникает очевидный вопрос: что произойдет, если мы сравним NA==NA
. Это тоже приводит к NA
, но результат неоднозначен, поскольку нет смысла сравнивать два отсутствующих значения. То же самое и с другими операторами, такими как >, <, !=, &, |, ||, &&
. Чтобы проверить, является ли значение NA
, используйте is.na()
.
NA == NA
#> [1] NA
Создано 19.06.2020 пакетом REPEX (v0.3.0)
Но в случае некоторых идентификаторов, которые являются ИСТИННЫМИ (или ЛОЖНЫМИ) независимо от значений, результатом будет ИСТИНА (или ЛОЖЬ). Например:
- Результат выражения
a AND b
будет ИСТИНА тогда и только тогда, когда оба a
и b
ИСТИНА. Во всех остальных случаях это ЛОЖЬ. 1
FALSE && NA
#> [1] FALSE
Создано 19.06.2020 пакетом REPEX (v0.3.0)
Результатом выражения
a OR b
будет ЛОЖЬ тогда и только тогда, когда оба
a
и
b
- ЛОЖЬ. Во всех остальных случаях это ИСТИНА.
2 TRUE || NA
#> [1] TRUE
Создано 19.06.2020 пакетом REPEX (v0.3.0)