4.7 Základní logické operace

Zakladni logicke operace zahrnuji logicky soucin ("a zaroven," &), logicky soucet ("nebo," |) a negaci ("opak," !). Krome toho samozrejme funguji i zavorky. Vyznam jednotlivych operaci ukazuje tabulka 4.1. Všimněte si, že !(V1 & V2) \(=\) !V1 | !V2 a !(V1 | V2) \(=\) !V1 & !V2.

Tabulka 4.1: Význam základních logických operací.
V1 V2 V1 & V2 V1 | V2 !V1 !(V1 & V2) !(V1 | V2)
TRUE TRUE TRUE TRUE FALSE FALSE FALSE
TRUE FALSE FALSE TRUE FALSE TRUE FALSE
FALSE TRUE FALSE TRUE TRUE TRUE FALSE
FALSE FALSE FALSE FALSE TRUE TRUE TRUE

Logický součin a součet existují v R ve dvou formách: jednoduché a “zkratující.” Ta druhá operátory zdvojuje, takže místo & se použije && a místo | se použije ||. Jednoduchá forma se používá při vyhodnocování operátorů na logických vektorech:

c(TRUE, TRUE, FALSE, FALSE) & c(TRUE, FALSE, TRUE, FALSE)
## [1]  TRUE FALSE FALSE FALSE
c(TRUE, TRUE, FALSE, FALSE) | c(TRUE, FALSE, TRUE, FALSE)
## [1]  TRUE  TRUE  TRUE FALSE

Zkratujici forma se pouziva v podminkach, viz oddil 7.1. V tomto případě se vyhodnocování výrazu zastaví ve chvíli, kdy je výsledek jednoznačně známý, tj. např. ve výrazu

FALSE && !(TRUE || FALSE)
## [1] FALSE

vyhodnocování skončí hned prvním FALSE, protože po jeho vyhodnocení výsledek jasný. Pokud byste použili zkratující formu na vektory, výsledek se bude týkat první položky vektoru:

c(TRUE, FALSE) && c(TRUE, TRUE)
## [1] TRUE

Vektorová funkce all() vrátí TRUE, pokud jsou všechny prvky vektoru TRUE; jinak vrátí FALSE. Vektorová funkce any() vrátí TRUE, pokud je aspoň jedna hodnota TRUE; jinak vrátí FALSE. (Jedná se tedy o logický součin a součet přes všechny prvky vektoru.) Funkce all.equal() a identical() byly představeny výše.

all(c(TRUE, TRUE, TRUE))
## [1] TRUE
all(c(TRUE, TRUE, FALSE))
## [1] FALSE
any(c(TRUE, TRUE, FALSE))
## [1] TRUE
any(c(FALSE, FALSE, FALSE))
## [1] FALSE