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.

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.Mas, se você tiver TRUE de um lado e FALSE do outro, o resultado lógico será FALSE.
Além de variáveis lógicas, você pode verificar a igualdade de outros tipos.
Vamos comparar strings e números.
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ó:
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.
É 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
tvem depois deRna ordem alfabética,té maior queR.É 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.
(>=)(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.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.
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.
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.
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.