Подтвердить что ты не робот

Логические операторы (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

Можете ли вы объяснить эти выходы?

4b9b3361

Ответ 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