Instrução IF, ELSE, ELSE IF em R
⚡ Resumo Inteligente
As instruções `if Else` e `else If` em R escolhem qual bloco de código será executado com base em uma condição lógica. Este guia aborda a forma com duas ramificações, cadeias com múltiplas ramificações, a função `ifelse()` vetorizada e a função `switch()` para correspondências exatas.

A instrução if else em R
An se mais A instrução executa um bloco de código quando uma condição é VERDADEIRA e outro quando é FALSA. Em R, a sintaxe é:
if (condition) { Expr1 } else { Expr2 }
Verifica se a variável chamada `quantity` é maior que 20. Se for, o código imprime "Você vendeu muito!", caso contrário, imprime "Não o suficiente para hoje".
# Create vector quantity quantity <- 25 # Set the if-else statement if (quantity > 20) { print('You sold a lot!') } else { print('Not enough for today') }
Saída:
## [1] "You sold a lot!"
ObservaçãoA indentação não altera a forma como o R executa o código, mas uma indentação consistente é o que mantém uma longa cadeia de condições legível. Observe também que a chave de fechamento e a palavra-chave `else` devem estar na mesma linha; caso contrário, o R considera o bloco `if` como completo e gera um erro.
A instrução else if em R
Testes adicionais em cadeia com Senão seR não possui a palavra-chave elif, ou seja, PythonEm R, você escreve as duas palavras separadamente e pode adicionar quantas ramificações forem necessárias. A sintaxe é:
if (condition1) { expr1 } else if (condition2) { expr2 } else if (condition3) { expr3 } else { expr4 }
Suponha que você queira três resultados: menos de 20 imprime "Não é suficiente para hoje", entre 20 e 30 imprime "Dia normal" e acima de 30 imprime "Que dia ótimo!".
Você pode tentar alterar a quantidade.
# Create the variable quantity quantity <- 10 # Create multiple condition statement if (quantity < 20) { print('Not enough for today') } else if (quantity >= 20 & quantity <= 30) { print('Average day') } else { print('What a great day!') }
Saída:
## [1] "Not enough for today"
2 exemplo:
As taxas de IVA variam conforme a categoria do produto. Imagine três categorias, cada uma com sua própria taxa:
| Categorias | Produtos | NIF |
|---|---|---|
| A | Livro, revista, jornal, etc. | 8% |
| B | Vegetais, carnes, bebidas, etc. | 10% |
| C | Camiseta, jeans, calça, etc. | 20% |
Uma cadeia "else if" aplica a taxa correta ao produto comprado pelo cliente:
category <- 'A' price <- 10 if (category =='A'){ cat('A vat rate of 8% is applied.','The total price is',price *1.08) } else if (category =='B'){ cat('A vat rate of 10% is applied.','The total price is',price *1.10) } else { cat('A vat rate of 20% is applied.','The total price is',price *1.20) }
Saída:
## A vat rate of 8% is applied. The total price is 10.8
A função vetorizada ifelse() em R
A instrução `if` lida com exatamente um valor. Se você fornecer um vetor, o R 4.2 ou posterior gerará um erro, pois a condição deve ser um único valor `TRUE` ou `FALSE`. A função `ifelse()` resolve isso testando cada elemento de uma vez e retornando um vetor de mesmo comprimento.
quantities <- c(10, 25, 40, 18) # if cannot do this result <- ifelse(quantities > 20, 'You sold a lot!', 'Not enough for today') result
Saída:
## [1] "Not enough for today" "You sold a lot!" "You sold a lot!" ## [4] "Not enough for today"
Os três argumentos são o teste, o valor retornado quando o teste é VERDADEIRO e o valor retornado quando é FALSO. Todos os três são reciclados até atingirem o mesmo comprimento.
Aninhar `ifelse()` reproduz uma cadeia `else if` em todo o vetor:
ifelse(quantities < 20, 'Not enough for today', ifelse(quantities <= 30, 'Average day', 'What a great day!'))
É importante conhecer duas limitações. A função `ifelse()` remove atributos como níveis de fator e classe de data do resultado e avalia ambos os ramos para cada elemento, o que é um desperdício quando um dos ramos é custoso. A alternativa é o dplyr. caso_quando() Evita completamente o aninhamento e mantém os tipos intactos:
library(dplyr) case_when( quantities < 20 ~ 'Not enough for today', quantities <= 30 ~ 'Average day', TRUE ~ 'What a great day!' )
A instrução switch() em R
Quando cada ramo testa a mesma variável para igualdade, uma longa cadeia else if torna-se difícil de ler. switch() substitui isso por uma única verificação.
category <- 'A' price <- 10 vat <- switch(category, 'A' = 1.08, 'B' = 1.10, 'C' = 1.20, 1.20) # the unnamed last value is the default cat('The total price is', price * vat)
Três regras regem seu comportamento:
- Com um argumento de caractere, a função switch() encontra a correspondência exata do nome. Não há correspondência parcial nem correspondência de padrões.
- Um elemento final sem nome atua como o valor padrão. Sem ele, um valor não correspondido retorna NULL de forma invisível, o que é uma fonte comum de erros silenciosos.
- Com um argumento inteiro, switch() seleciona por posição: switch(2, “a”, “b”, “c”) retorna “b”.
Use `switch()` para correspondências exatas com um conjunto fixo de valores e reserve `else if` para intervalos e condições compostas, que `switch()` não consegue expressar. Para aplicar uma condição repetidamente a uma sequência, combine-a com um `if`. para laço loop while.
lógico Operatores em condições R
Os operadores que criam uma condição se comportam de maneira diferente uns dos outros, e essa diferença importa.
| Operator | Significado | Use em |
|---|---|---|
| & | Em termos de elementos E | ifelse(), filter(), vetores inteiros |
| && | AND de valor único, curto-circuitos | se () e enquanto () |
| | | OU elemento a elemento | ifelse(), filter(), vetores inteiros |
| || | Circuito OU de valor único, curto-circuito | se () e enquanto () |
| ! | NÃO, invalida o teste. | A qualquer hora |
| %em% | O valor está neste conjunto? | Substitui longas correntes OR |
Por que o curto-circuito é importante. A forma dupla para assim que a resposta é definida, portanto o lado direito nunca é avaliado quando o lado esquerdo já decidiu o resultado. Isso torna seguro escrever uma cláusula de guarda:
# Safe: length() is checked before x[1] is touched if (length(x) > 0 && x[1] > 10) print('ok')
Comparando com diversos valores. Opte por usar %in% em vez de encadear testes de igualdade, que é mais curto e mais difícil de digitar incorretamente:
if (category %in% c('A', 'B')) { print('Reduced VAT rate applies') }
Um último aviso: um único sinal de igual atribui um valor, não compara. Sempre use == dentro de uma condição.
Instruções condicionais em R: Guia rápido
Todas as construções utilizadas neste tutorial estão listadas abaixo:
| Objetivo | Code |
|---|---|
| Dois ramos |
if (cond) { a } else { b } |
| Várias ramificações |
if (c1) { a } else if (c2) { b } else { c } |
| Condição vetorizada |
ifelse(test, yes, no)
|
| Múltiplas ramificações em um vetor |
case_when(c1 ~ a, c2 ~ b, TRUE ~ c)
|
| Pesquisa de correspondência exata |
switch(x, "A" = 1, "B" = 2, 0) |
| Teste de adesão |
if (x %in% c("A", "B")) { } |

