Logical operators (AND, OR) with NA, TRUE and FALSE Logical operators (AND, OR) with NA, TRUE and FALSE r r

Logical operators (AND, OR) with NA, TRUE and FALSE


To quote from ?Logic:

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.

The key there is the word "ambiguous". NA represents something that is "unknown". So NA & TRUE could be either true or false, but we don't know. Whereas NA & FALSE will be false no matter what the missing value is.


It's explained in 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.

From the examples in 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  TRUEouter(x, x, "|") ## OR  table#        <NA> FALSE TRUE#  <NA>    NA    NA TRUE# FALSE    NA FALSE TRUE#  TRUE  TRUE  TRUE TRUE