2013-05-30 6 views
13

nie mogę zrozumieć właściwości logicznego (Boolean) Wartości TRUE, FALSE i NA gdy używana z logiczną OR (|) i logiczne AND (&). Oto kilka przykładów:operatory logiczne (AND, OR) z NA, prawdą i fałszem

NA | TRUE 
# [1] TRUE 

NA | FALSE 
# [1] NA 

NA & TRUE 
# [1] NA 

NA & FALSE 
# [1] FALSE 

Czy możesz wyjaśnić te wyniki?

Odpowiedz

20

Cytując ?Logic:

NA jest poprawnym obiektem logiczne. Jeśli składnik x lub y jest NA, wynikiem będzie NA, jeśli wynik jest niejednoznaczny. Innymi słowy NA & TRUE jest wartością NA, ale NA & FALSE jest wartością FALSE. Zobacz przykłady poniżej: .

Kluczem jest słowo "niejednoznaczny". NA reprezentuje coś, co jest "nieznane". Tak więc NA & TRUE może być prawdziwe lub fałszywe, ale nie wiemy. Podczas gdy NA & FALSE będzie fałszywa bez względu na to, jaka jest jej brakująca wartość.

10

Jest to wyjaśnione w 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. 

Z przykładów w 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