Percursos
/
R
R
/
Programa
/
Booleans
Bo

Booleans em R

1 exercício

Sobre Booleans

Boolean em R

Os valores verdadeiro ou falso são representados pelo tipo logical. Contém apenas dois valores: TRUE e FALSE.

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

Operadores booleanos

Em R existem cinco operadores booleanos.

!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 «e» booleano. Resultam em TRUE se as expressões em ambos os lados de && forem TRUE.

|| e | são o «ou» booleano. Resultam em TRUE se uma expressão de qualquer um dos lados de || for TRUE.

Repara que existem dois conjuntos de operadores e/ou.

  • As versões de dois carateres operam sobre valores únicos.
  • As variantes de um só caráter operam elemento a elemento sobre vetores, devolvendo um vetor de booleanos.

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

Usar & e | com valores únicos funciona no exemplo acima, porque estes são tratados como vetores de comprimento 1. O comportamento é subtilmente diferente do dos operadores de dois carateres, uma vez que só estes últimos fazem «curto-circuito»: o valor à direita não é avaliado se o valor à esquerda for suficiente para determinar o resultado. Assim, TRUE || anything é sempre TRUE, seja qual for a expressão lógica que anything representa, por isso o anything é ignorado.

Usar && ou || com vetores (de comprimento 2 ou mais) significa que só o primeiro elemento é usado na comparação, produzindo um único TRUE/FALSE e provavelmente uma mensagem de aviso. Provavelmente não era isto que pretendias.

! é o «não» booleano. Troca os valores TRUE e FALSE.

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

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

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

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

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

xor(TRUE, FALSE)
#> [1] TRUE
xor(TRUE, TRUE)
#> [1] FALSE
Editar via GitHub A ligação abre numa nova janela ou separador

Aprende Booleans