Логические операторы (AND, OR) с NA, TRUE и FALSE
Я не могу понять свойства логических (булевых) значений TRUE
, FALSE
и NA
при использовании с логическим OR (|
) и логическим AND (&
). Вот несколько примеров:
NA | TRUE
# [1] TRUE
NA | FALSE
# [1] NA
NA & TRUE
# [1] NA
NA & FALSE
# [1] FALSE
Можете ли вы объяснить эти выходы?
Ответы
Ответ 1
Цитата из ?Logic
:
NA является допустимым логическим объектом. Если компонент x или y равен NA, результатом будет NA, если результат неоднозначен. Другими словами, NA & TRUE оценивает значение NA, но NA и FALSE оцениваются как FALSE. См. примеры ниже.
Ключом является слово "двусмысленный". NA
представляет собой нечто неизвестное. Таким образом, NA & TRUE
может быть истинным или ложным, но мы не знаем. В то время как NA & FALSE
будет ложным независимо от того, что отсутствует.
Ответ 2
Это объясняется в help("|")
:
‘NA’ is a valid logical object. Where a component of ‘x’ or ‘y’
is ‘NA’, the result will be ‘NA’ if the outcome is ambiguous. In
other words ‘NA & TRUE’ evaluates to ‘NA’, but ‘NA & FALSE’
evaluates to ‘FALSE’. See the examples below.
Из примеров в help("|")
:
> x <- c(NA, FALSE, TRUE)
> names(x) <- as.character(x)
> outer(x, x, "&")## AND table
<NA> FALSE TRUE
<NA> NA FALSE NA
FALSE FALSE FALSE FALSE
TRUE NA FALSE TRUE
> outer(x, x, "|")## OR table
<NA> FALSE TRUE
<NA> NA NA TRUE
FALSE NA FALSE TRUE
TRUE TRUE TRUE TRUE