Значення правда або неправда представлені типом logical.
Він містить лише два значення: TRUE та FALSE.
TRUE
#> [1] TRUE
FALSE
#> [1] FALSE
typeof(TRUE)
#> [1] "logical"
У R є пʼять булевих операторів.
!TRUE # FALSE (not)
TRUE && FALSE # FALSE (scalar and)
TRUE || FALSE # TRUE (scalar or)
TRUE & FALSE # FALSE (vector and)
TRUE | FALSE # TRUE (vector or)
&& (логічне і) та & (логічне і) є булевими «і».
Вони обчислюються до TRUE, якщо вирази з обох сторін && (і) є TRUE.
|| (логічне або) та | (логічне або) є булевими «або».
Вони обчислюються до TRUE, якщо вираз з будь-якої сторони || (або) є TRUE.
Зауважмо, що є два набори операторів «і/або».
Ця відмінність стане важливою, і, ймовірно, зрозумілішою, у концепції vector-filtering.
Використання & та | з окремими значеннями працює в наведеному вище прикладі, оскільки вони обробляються як вектори довжини 1.
Поведінка дещо відрізняється від операторів з подвійними символами, оскільки лише останні мають коротке замикання: значення праворуч не обчислюється, якщо лівого значення достатньо для визначення результату.
Отже, TRUE || anything завжди TRUE, незалежно від того, який логічний вираз представляє anything, тому anything ігнорується.
Використання && або || з векторами (довжиною 2 або більше) означає, що в порівнянні використовується лише перший елемент, що дає єдине TRUE/FALSE і, ймовірно, попереджувальне повідомлення.
Це, ймовірно, не те, що ми мали на увазі.
! є логічним запереченням.
Він обмінює значення TRUE та FALSE.
!TRUE
#> [1] FALSE
!FALSE
#> [1] TRUE
Для довших і складніших виразів краще використовувати дужки, щоб зробити намір зрозумілим.
(TRUE || FALSE) && (FALSE && TRUE)
#> [1] FALSE
TRUE || FALSE && (FALSE && TRUE)
#> [1] TRUE
Немає інфіксного оператора для виключного або (тобто A АБО B, але не обидва). У цьому випадку можна використати функцію xor().
xor(TRUE, FALSE)
#> [1] TRUE
xor(TRUE, TRUE)
#> [1] FALSE