Les valeurs vrai ou faux sont représentées par le type logical.
Il ne contient que deux valeurs : TRUE et FALSE.
TRUE
#> [1] TRUE
FALSE
#> [1] FALSE
typeof(TRUE)
#> [1] "logical"
Il existe cinq opérateurs booléens en R.
!TRUE # FALSE (not)
TRUE && FALSE # FALSE (scalar and)
TRUE || FALSE # TRUE (scalar or)
TRUE & FALSE # FALSE (vector and)
TRUE | FALSE # TRUE (vector or)
&& et & correspondent au « et » booléen.
Ils renvoient TRUE si les expressions situées de part et d'autre de && valent TRUE.
|| et | correspondent au « ou » booléen.
Ils renvoient TRUE si une expression d'un côté ou de l'autre de || vaut TRUE.
Remarque qu'il existe deux ensembles d'opérateurs « et » et « ou ».
Cette distinction deviendra importante, et sans doute plus claire, dans le concept vector-filtering.
Utiliser & et | sur des valeurs uniques fonctionne dans l'exemple ci-dessus, car elles sont traitées comme des vecteurs de longueur 1.
Le comportement diffère subtilement de celui des opérateurs à deux caractères, car seuls ces derniers fonctionnent en court-circuit : la valeur de droite n'est pas évaluée si celle de gauche suffit à déterminer le résultat.
Ainsi, TRUE || anything vaut toujours TRUE, quelle que soit l'expression logique que représente anything, et anything est donc ignoré.
Utiliser && ou || sur des vecteurs (de longueur 2 ou plus) fait que seul le premier élément entre dans la comparaison, ce qui produit un unique TRUE/FALSE et probablement un message d'avertissement.
Ce n'est probablement pas ce que tu voulais faire.
! est l'opérateur booléen « non ».
Il échange les valeurs TRUE et FALSE.
!TRUE
#> [1] FALSE
!FALSE
#> [1] TRUE
Pour des expressions plus longues et plus compliquées, il vaut mieux utiliser des parenthèses afin de rendre ton intention claire.
(TRUE || FALSE) && (FALSE && TRUE)
#> [1] FALSE
TRUE || FALSE && (FALSE && TRUE)
#> [1] TRUE
Il n'existe pas d'opérateur infixe pour le ou exclusif (c'est-à-dire A ou B, mais pas les deux). Dans ce cas, tu peux utiliser la fonction xor().
xor(TRUE, FALSE)
#> [1] TRUE
xor(TRUE, TRUE)
#> [1] FALSE