Curso
Operadores relacionais
Operadores relacionais, também conhecidos como comparadores, ajudam você a ver como um R-object se relaciona com outro. Por exemplo, é possível verificar se dois objetos são iguais usando o sinal == (igual duplo). Um operador lógico que seja TRUE dos dois lados retorna TRUE, já que TRUE é igual a TRUE, como mostrado abaixo.
TRUE == TRUE
TRUE
Mas, se você tiver TRUE de um lado e FALSE do outro, o resultado lógico será FALSE.
TRUE == FALSE
FALSE
Além de variáveis lógicas, você pode verificar a igualdade de outros tipos.
Vamos comparar strings e números.
100 == 100
TRUE
100 == 200
FALSE
'tutorial' == 'R'
FALSE
- O oposto do operador de igualdade é o de
diferença, dado pelo sinal!=(exclamação seguida de igual).
Agora, todas as condições que antes deram FALSE passam a ser TRUE. Veja só:
100 != 200
TRUE
'tutorial' != 'R'
TRUE
TRUE != FALSE
TRUE
Da mesma forma, o operador de diferença também funciona para valores numéricos e outros objetos de R, como matrizes, vetores e listas.
-
E se você quiser verificar, entre dois objetos de R, qual é maior ou menor que o outro? Você pode, usando os sinais
<e>(menor que e maior que).Primeiro, um exemplo numérico.
2 > 10
FALSE
-200 < 0
TRUE
É autoexplicativo por que 2 não é maior que 10 e por que -200 é menor que 0. Mas e strings ou caracteres? Vamos ver.
Parece que o R prioriza a ordem alfabética para decidir qual string ou caractere é "maior".
No exemplo abaixo, como t vem depois de R na ordem alfabética, t é maior que R.
'tutorial' > 'RRRRRRRRR'
TRUE
É importante notar que, em R e em quase todas as linguagens, TRUE é interpretado como 1 e FALSE como 0. Com isso, TRUE é maior que FALSE.
TRUE > FALSE
TRUE
- Você também pode verificar se um objeto é maior ou igual
(>=)(ou menor ou igual<=) a outro. Para isso, use o sinal de menor/maior combinado com igual. Se uma das duas condições (menor ou igual / maior ou igual) for TRUE, a condição completa será TRUE.
5 >= 5 # 5 não é maior que 5, mas é igual; portanto, retorna TRUE.
TRUE
5 >= 10
FALSE
Você pode aprender sobre tipos de dados em R neste tutorial da DataCamp. Ele mostra que o R lida muito bem com listas, matrizes e vetores.
E os comparadores funcionam com vetores? Vamos descobrir.
Por exemplo, você tem um vetor linha com o número de visualizações do seu último tutorial da DataCamp nos últimos 10 dias. Agora quer saber em quais dias as visualizações foram maiores ou iguais a 100. Você pode usar o operador maior ou igual direto.
datacamp_views <- c(100,20,5,200,60,88,190,33,290,64)
length(datacamp_views)
10
datacamp_views >= 100
- TRUE
- FALSE
- FALSE
- TRUE
- FALSE
- FALSE
- TRUE
- FALSE
- TRUE
- FALSE
Como você pode ver, para o primeiro, quarto, sétimo e nono dia, o resultado é TRUE — nesses dias, as visualizações foram maiores ou iguais a 100.
Da mesma forma, você pode comparar dois vetores ou até duas matrizes.
youtube_views <- c(10,20,1000,64,100,9,19,3,90,4)
Assim, você pode criar uma aplicação simples para descobrir quando as visualizações do seu tutorial na DataCamp foram maiores que as do seu vídeo no YouTube (ou vice-versa).
O R compara os vetores elemento a elemento. No resultado abaixo, considerando o primeiro elemento de cada vetor, o de DataCamp tem 100 e o outro tem 10; por isso, retorna TRUE.
datacamp_views > youtube_views
- TRUE
- FALSE
- FALSE
- TRUE
- FALSE
- TRUE
- TRUE
- TRUE
- TRUE
- TRUE
Vamos comparar rapidamente duas expressões numéricas. Se você lembra da matemática básica, existe a regra BODMAS (ou PEMDAS), que define a ordem: parênteses, divisão, multiplicação, adição e subtração. A mesma regra vale para resolver as expressões em R abaixo.
-6 * 5 + 2 >= -10 + 1 # do lado esquerdo, faz-se a multiplicação primeiro e depois a adição, seguindo a BODMAS
FALSE
Domine suas habilidades em dados com o DataCamp
Mais de 10 milhões de pessoas aprendem Python, R, SQL e outras habilidades tecnológicas usando nossos cursos práticos elaborados por especialistas do setor.

Comparar matrizes
A capacidade do R de lidar com diferentes estruturas de dados em comparações não para nos vetores. Matrizes e operadores relacionais também funcionam muito bem juntos!
Em vez de vetores (como no exemplo anterior), os dados de DataCamp e YouTube agora estão em uma matriz chamada views. A primeira linha contém as informações da DataCamp; a segunda, do YouTube. Você usará a função matrix do R para criar a matriz a partir dos vetores datacamp e youtube do exemplo anterior.
datacamp_views <- c(100,20,5,200,60,88,190,33,290,64)
youtube_views <- c(10,20,1000,64,100,9,19,3,90,4)
views <- matrix(c(datacamp_views, youtube_views), nrow = 2, byrow = TRUE)
views
| 100 | 20 | 5 | 200 | 60 | 88 | 190 | 33 | 290 | 64 |
| 10 | 20 | 1000 | 64 | 100 | 9 | 19 | 3 | 90 | 4 |
Vamos descobrir quando as visualizações, tanto da DataCamp quanto do YouTube, foram iguais a 20.
views == 20
| FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
Ótimo! Agora que você entendeu como os operadores relacionais funcionam, vamos seguir para os operadores lógicos.
Operadores lógicos
O R permite combinar os resultados dos operadores relacionais oferecendo os seguintes operadores lógicos:
- operador
AND( & ) - operador
OR( | ) - operador
NOT( ! )
Vamos ver cada um deles.
- Operador AND: como em outras linguagens, o AND do R recebe dois valores lógicos e retorna TRUE somente se ambos forem verdadeiros; caso contrário, retorna FALSE.
Veja alguns exemplos autoexplicativos.
TRUE & TRUE # 1.1 = 1
TRUE
TRUE & FALSE # 1.0 = 0
FALSE
FALSE & FALSE # 0.0 = 0
FALSE
FALSE & TRUE # 0.1 = 0
FALSE
Da mesma forma, em vez de usar valores lógicos diretamente, você pode usar os resultados dos comparadores com esses operadores.
x <- 100
x < 200 & x >= 100 # como x é menor que 200 e maior ou igual a 100, retorna TRUE.
TRUE
x < 200 & x > 100 # isto é FALSE, pois a segunda comparação (x > 100) é falsa.
FALSE
- Operador OR: o OR é parecido com o AND, mas aqui a expressão OR é TRUE se pelo menos um dos valores lógicos for TRUE.
Veja alguns exemplos autoexplicativos.
TRUE | TRUE # 1 + 1 = 1
TRUE
TRUE | FALSE # 1 + 0 = 1
TRUE
FALSE | FALSE # 0 + 0 = 0
FALSE
FALSE | TRUE # 0 + 1 = 1
TRUE
Vamos usar o mesmo exemplo numérico de antes, mas agora o resultado deve ser diferente.
x <- 100
x < 200 | x > 100 # é TRUE, pois a primeira comparação (x < 200) é verdadeira.
TRUE
- Operador NOT: é o mais simples; ele nega o valor lógico ao qual é aplicado — pense nele como o oposto lógico.
Vamos ver alguns exemplos:
a = 1
!a # retorna FALSE, já que o “não a” é 0, que é FALSE.
FALSE
a = 0
!a # semelhante ao acima, retorna TRUE pois a = 0 e “não a” é 1.
TRUE
Veja alguns casos em que o NOT pode ajudar com funções nativas do R.
is.numeric(5) # retorna TRUE, pois 5 é numérico
TRUE
!is.numeric(5) # o “não” disso retorna FALSE
FALSE
is.numeric('aditya')
FALSE
O exemplo abaixo é útil quando você lida com uma mistura de dados numéricos e strings e quer filtrar apenas as strings/caracteres (por exemplo, de uma lista) e manter só os numéricos.
!is.numeric('aditya')
TRUE
Por fim, vamos ver como operadores lógicos funcionam com vetores e matrizes.
a <- c(FALSE, TRUE, FALSE)
b <- c(TRUE, TRUE, FALSE)
a & b # operador AND
- FALSE
- TRUE
- FALSE
a | b # operador OR
- TRUE
- TRUE
- FALSE
Com base nos resultados, fica claro que, assim como com operadores relacionais, os operadores lógicos também operam elemento a elemento em vetores.
Já o operador NOT só pode ser aplicado a um vetor por vez ou ao resultado de duas operações vetoriais.
!a
- TRUE
- FALSE
- TRUE
!b
- FALSE
- FALSE
- TRUE
No exemplo abaixo, o NOT está fora dos parênteses, ou seja, é aplicado ao resultado de a | b. Esse operador também é conhecido como NOR (Not-OR).
!(a | b) # operador NOR
- FALSE
- FALSE
- TRUE
Antes de passar para as condicionais, um pequeno exercício.
Você tem o mesmo vetor de visualizações do tutorial da DataCamp definido acima. Vamos extrair o último elemento com o método tail do R.
last <- tail(datacamp_views,1)
print (last)
[1] 64
Vamos ver se o último elemento é menor que 100 ou maior que 100.
last < 100 | last > 100
TRUE
Como o último elemento é menor que 100, uma das expressões é satisfeita e o resultado é TRUE.
Vamos ao tópico final deste tutorial: as instruções condicionais!
Instruções condicionais
Até aqui, você aprendeu sobre operadores relacionais (como os objetos em R se comparam) e operadores lógicos (para combinar valores lógicos). O R permite combinar tudo isso e usar o resultado para alterar o comportamento dos seus scripts. Com isso, vamos às instruções if e else.
A sintaxe do if é: if(condição){ // expressão } A instrução if recebe uma condição (entre parênteses), que pode usar operadores relacionais ou lógicos; se essa condição for TRUE, o código entre chaves é executado. Simples, né?
Vamos entender com um exemplo.
Suponha que você tenha a variável x igual a -10. Agora, aplique uma condição que verifica se x é maior que zero e negue-a com NOT. Como a condição é TRUE, o código dentro das chaves será executado.
x <- -10
if (!x > 0){
print("x is a negative number")
}
[1] "x is a negative number"
Se você remover o NOT, a condição vira FALSE e o código dentro das chaves não será executado.
if (x > 0){
print("x is a positive number")
}
Agora, vamos ao else com a ajuda da sintaxe: if(condição){ // expressão1 }else{ // expressão2 } Diferente do if, o else não tem condição própria — ele deve ser usado junto com o if. O código do else é executado apenas quando a condição do if não é TRUE.
Vamos usar o mesmo exemplo de if para entender o else.
x <- -10
if (x > 0){
print("x is a positive number")
}else{
print("x is a negative number")
}
[1] "x is a negative number"
No exemplo acima, como a condição do if não é válida, o else é executado.
Existe ainda o else if, que fica entre o if e o else. Ele é executado quando a condição do if não é satisfeita. Em resumo, o else tem a última prioridade. if(condição){ // expressão1 }else if(condição){ // expressão2 }else{ // expressão3 }
x <- 0
if (x > 0){
print("x is a positive number")
}else if (x == 0){
print("x is zero")
}else{
print("x is a negative number")
}
[1] "x is zero"
Costumamos usar else if quando as condições não são mutuamente exclusivas — ou seja, podem ocorrer ao mesmo tempo. Veja:
x <- 12
if (x %% 3 == 0){
print("x is divisible by 3")
}else if (x %% 4 == 0){
print("x is divisible by 4")
}else{
print("x is neither divisible by 3 nor by 4")
}
[1] "x is divisible by 3"
No exemplo, a condição do if se torna TRUE, então o R sai da estrutura de controle e não avalia as próximas, mesmo que a de else if também fosse TRUE. Contudo, se você usasse outro if em vez de else if, ele também seria executado.
Conclusão
Parabéns por concluir o tutorial!
Este conteúdo é um ótimo ponto de partida para quem está começando em R. Como exercício, tente usar operadores relacionais e lógicos como condições em instruções condicionais.
Há ainda temas a cobrir em R, como utilitários e aprendizado de máquina em R, que virão em próximos tutoriais. Fique de olho!
Se tiver dúvidas sobre este tutorial, deixe nos comentários abaixo.
Se quiser aprender mais sobre R, faça o curso Intermediate R da DataCamp.
