6  Operações Lógicas

Status 🟦🟨🟨

A linguagem R oferece uma série de operadores para utilização em testes lógicos.

6.1 Operadores Relacionais

Operador Função
> Maior que
< Menor que
>= Maior ou igual a
<= Menor ou igual a
== Igual a
!= Diferente de
5 > 6
[1] FALSE
5 <= 6
[1] TRUE
5 == 6
[1] FALSE
5 != 6
[1] TRUE

6.2 Operadores Lógicos

Operador Função
! Negação
& E
| Ou
xor Ou exclusivo
isTRUE Testa se verdadeiro
isFALSE Testa se falso
!FALSE
[1] TRUE
!TRUE
[1] FALSE
5 > 6
[1] FALSE
!5 > 6
[1] TRUE
isTRUE(5 > 6)
[1] FALSE
isFALSE(5 > 6)
[1] TRUE

6.2.1 Ou Exclusivo (Xor)

O operador xor fornece saída verdadeira quando apenas um dos valores for verdadeiro.

# Falso XOR Falso = Falso
xor(5 > 6, 6 > 9)
[1] FALSE
# Verdadeiro XOR Verdadeiro = Falso
xor(5 > 4, 6 > 5)
[1] FALSE
# Verdadeiro XOR Falso = Verdadeiro
xor(5 > 4, 6 > 9)
[1] TRUE
# Falso XOR Verdadeiro = Falso
xor(5 > 6, 6 > 5)
[1] TRUE

6.3 Precedência de Operadores Lógicos e Relacionais

Na utilização de testes lógicos é importante observar a ordem (precedência) de aplicação dos operadores. O uso de parênteses altera a o escopo de aplicação dos operadores.

Precedência de Operadores
Ordem Operador
1 <, >, <=, >=, ==, !=
2 !
3 &
4 |

Abaixo alguns testes.

# Falso E Falso = Falso
5 > 6 & 4 > 5
[1] FALSE
# Verdadeiro E Verdadeiro = Verdadeiro
!5 > 6 & !4 > 5
[1] TRUE
# Verdadeiro E Falso = Falso
!5 > 6 & 4 > 5
[1] FALSE
# Negação de(Falso E Falso) = Verdadeiro
!(5 > 6 & 4 > 5)
[1] TRUE
# Falso OU Falso = Falso
5 > 6 | 4 > 5
[1] FALSE
# Verdadeiro OU Verdadeiro = Verdadeiro
!5 > 6 | !4 > 5
[1] TRUE
# Verdadeiro OU Falso = Verdadeiro
!5 > 6 | 4 > 5
[1] TRUE
# Negação de (Falso OU Falso) = Verdadeiro
!(5 > 6 | 4 > 5)
[1] TRUE

6.4 Funções isTRUE e isFALSE

Estas duas funções oferecem retorno lógico a partir de uma entrada. Exemplo:

isTRUE(5 > 6)
[1] FALSE
isFALSE(5 > 6)
[1] TRUE

Estas funções oferecem vantagens em testes que possam possuir NAs. Exemplo:

isTRUE(NA > 5)
[1] FALSE
isFALSE(5 > NA)
[1] FALSE
NA > 5
[1] NA

6.5 Funções is.

R também oferece uma gama enorme de funções que testam objetos, abaixo alguns exemplos:

is.character('A')
[1] TRUE
is.numeric(5)
[1] TRUE
is.double(5)
[1] TRUE
is.na(NA)
[1] TRUE
is.na(NaN)
[1] TRUE
is.nan(NA)
[1] FALSE
is.nan(NaN)
[1] TRUE

Note que NaN é considerado Not Avalibale, ao passo que NA não é considerado Not a Number.

6.6 All e any

As funções all e any testam se vetores possuem valores TRUE, todos ou pelo menos 1, respectivamente.

vetor_logico <- c(T, T, T)

all(vetor_logico)
[1] TRUE
any(vetor_logico)
[1] TRUE

Apenas valores FALSE:

vetor_logico <- c(F, F, F)

all(vetor_logico)
[1] FALSE
any(vetor_logico)
[1] FALSE

Vetor com apenas 1 valor TRUE.

vetor_logico <- c(T, F, F, F)
all(vetor_logico)
[1] FALSE
any(vetor_logico)
[1] TRUE

Vetor com todos os valores falsos (FALSE).

vetor_logico <- c(F, F, F, F)
all(vetor_logico)
[1] FALSE
any(vetor_logico)
[1] FALSE

Note que a presença de valores NA altera completamente o retorno da função all, mas não da função any.

vetor_logico <- c(T, F, T, NA)
all(vetor_logico)
[1] FALSE
any(vetor_logico)
[1] TRUE

Isto ocorre, pois a função any só retorna NA se existirem valores NA e FALSE no vetor.

vetor_logico <- c(F, NA, NA, NA)
any(vetor_logico)
[1] NA
vetor_logico <- c(NA, NA , NA, NA)
any(vetor_logico)
[1] NA

Ambas as funções aceitam o parâmetro na.rm, que remove no valores NA antes de fazer a avalição.

vetor_logico <- c(T, T, T, NA)
all(vetor_logico, na.rm = T)
[1] TRUE
any(vetor_logico, na.rm = T)
[1] TRUE

Com presença de valores falsos;

vetor_logico <- c(T, F, F, NA)
all(vetor_logico, na.rm = T)
[1] FALSE
any(vetor_logico, na.rm = T)
[1] TRUE

Equivalente a:

vetor_logico <- c(T, F, F)
all(vetor_logico, na.rm = T)
[1] FALSE
any(vetor_logico, na.rm = T)
[1] TRUE

6.6.1 AnyNA

Esta função teste se pelo menos um elemento é NA.

anyNA(c(10, NA))
[1] TRUE
anyNA(c(NA, NA))
[1] TRUE
anyNA(c(2, 1))
[1] FALSE

6.7 Operador %in%

O operador binário %in% efetua teste de presença do objeto da esquerda (left hand side) no da direita (right hand side).

x <- c(1, 2, 3, 4)
y <- c(3, 4, 5)

x %in% y
[1] FALSE FALSE  TRUE  TRUE
y %in% x
[1]  TRUE  TRUE FALSE

Veja que o retorno é dado pelo tamanho do objeto da esquerda. Assim x %in% y é uma operação completamente diferente de y %in% x.

Em casos de itens repetidos o retorno segue a mesma lógica, avaliando o obeto da esquerda dentro do da direita:

x <- c(1, 2, 2)
y <- 2
x %in% y
[1] FALSE  TRUE  TRUE
y %in% x
[1] TRUE

R Core Team (2023)

Última atualização: 11/10/2024 - 21:53:21