Trilhas
/
R
R
/
Programa
/
Booleans
Bo

Booleans em R

1 exercício

Sobre Booleans

Booleans em R

Valores verdadeiros ou falsos são representados pelo tipo logical. Ele contém apenas dois valores: TRUE e FALSE.

TRUE
#> [1] TRUE
FALSE
#> [1] FALSE
typeof(TRUE)
#> [1] "logical"

Operadores Boolean

Existem cinco operadores Boolean em R.

!TRUE # FALSE (not)
TRUE && FALSE # FALSE (scalar and)
TRUE || FALSE # TRUE (scalar or)

TRUE & FALSE # FALSE (vector and)
TRUE | FALSE # TRUE (vector or)

&& e & são o "and" Boolean. Eles resultam em TRUE se as expressões em ambos os lados de && forem TRUE.

|| e | são o "or" Boolean. Eles resultam em TRUE se uma expressão em qualquer um dos lados de || for TRUE.

Repare que existem dois conjuntos de operadores "and"/"or".

  • As versões com dois caracteres operam sobre valores únicos.
  • As variantes com um único caractere operam elemento a elemento sobre vetores, retornando um vetor de valores Boolean.

Essa distinção vai se tornar importante, e provavelmente mais clara, no conceito vector-filtering.

Usar & e | com valores únicos funciona no exemplo acima, porque eles são tratados como vetores de comprimento 1. O comportamento é sutilmente diferente do dos operadores de dois caracteres, já que apenas estes últimos fazem "curto-circuito": o valor da direita não é avaliado se o valor da esquerda já for suficiente para determinar o resultado. Assim, TRUE || anything é sempre TRUE, não importa que expressão lógica anything represente, então o anything é ignorado.

Usar && ou || com vetores (de comprimento 2 ou mais) significa que apenas o primeiro elemento é usado na comparação, gerando um único TRUE/FALSE e provavelmente uma mensagem de aviso. Provavelmente não é o que você pretendia.

! é o "not" Boolean. Ele troca os valores TRUE e FALSE.

!TRUE
#> [1] FALSE
!FALSE
#> [1] TRUE

Para expressões mais longas e complicadas, o melhor é usar parênteses para deixar sua intenção clara.

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

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

Não existe um operador infixo para ou exclusivo (ou seja, A OU B, mas não ambos). Nesse caso, dá para usar a função xor().

xor(TRUE, FALSE)
#> [1] TRUE
xor(TRUE, TRUE)
#> [1] FALSE
Editar via GitHub O link abre em uma nova janela ou aba

Aprenda Booleans