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.
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