IF, ELSE, ELSE IF Declaración en R
ā” Resumen inteligente
Las sentencias If Else y Else If en R determinan qué bloque de código se ejecuta según una condición lógica. Este tutorial abarca la forma de dos ramas, las cadenas de múltiples ramas, la función ifelse() vectorizada y switch() para coincidencias exactas.

La instrucción if-else en R
An si mÔs La instrucción ejecuta un bloque de código cuando una condición es VERDADERA y otro cuando es FALSA. En R, la sintaxis es:
if (condition) { Expr1 } else { Expr2 }
Comprueba si una variable llamada cantidad es mayor que 20. Si lo es, el código imprime "”Has vendido mucho!", de lo contrario imprime "No es suficiente para hoy".
# Create vector quantity quantity <- 25 # Set the if-else statement if (quantity > 20) { print('You sold a lot!') } else { print('Not enough for today') }
Salida:
## [1] "You sold a lot!"
Nota: La indentación no cambia la forma en que R ejecuta el código, pero una indentación consistente es lo que permite leer una larga cadena de condiciones. Tenga en cuenta tambiĆ©n que la llave de cierre y la palabra clave `else` deben estar en la misma lĆnea; de lo contrario, R considera que el bloque `if` estĆ” completo y genera un error.
La instrucción else if en R
Cadena de pruebas adicionales con Si no si. R no tiene palabra clave elif, es decir PythonEn R, escribes las dos palabras por separado y puedes agregar tantas ramas como necesites. La sintaxis es:
if (condition1) { expr1 } else if (condition2) { expr2 } else if (condition3) { expr3 } else { expr4 }
Supongamos que desea tres resultados: menos de 20 impresiones "No es suficiente para hoy", entre 20 y 30 impresiones "DĆa promedio" y mĆ”s de 30 impresiones "Ā”QuĆ© gran dĆa!".
Puedes intentar cambiar la cantidad de cantidad.
# 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!') }
Salida:
## [1] "Not enough for today"
Ejemplo 2:
Los tipos de IVA varĆan segĆŗn la categorĆa del producto. Imaginemos tres categorĆas, cada una con su propio tipo:
| CategorĆas | Productos | IVA |
|---|---|---|
| A | Libro, revista, periódico, etc. | 8% |
| B | Verduras, carnes, bebidas, etc. | 10% |
| C | Camiseta, jean, pantalón, etc. | 20% |
Una cadena de "si no" aplica la tasa correcta a lo que el cliente haya comprado:
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) }
Salida:
## A vat rate of 8% is applied. The total price is 10.8
La función vectorizada ifelse() en R
La instrucción if procesa un único valor. Si se le proporciona un vector, R 4.2 o posterior genera un error, ya que la condición debe ser un único valor VERDADERO o FALSO. La función ifelse() resuelve este problema evaluando cada elemento a la vez y devolviendo un vector de la misma longitud.
quantities <- c(10, 25, 40, 18) # if cannot do this result <- ifelse(quantities > 20, 'You sold a lot!', 'Not enough for today') result
Salida:
## [1] "Not enough for today" "You sold a lot!" "You sold a lot!" ## [4] "Not enough for today"
Los tres argumentos son la prueba, el valor devuelto cuando la prueba es VERDADERA y el valor devuelto cuando es FALSA. Los tres se reciclan hasta alcanzar la misma longitud.
Anidar ifelse() reproduce una cadena else if a lo largo de todo un vector:
ifelse(quantities < 20, 'Not enough for today', ifelse(quantities <= 30, 'Average day', 'What a great day!'))
Hay dos limitaciones que conviene conocer. ifelse() descarta atributos como los niveles de factor y la clase Date del resultado, y evalĆŗa ambas ramas para cada elemento, por lo que resulta ineficiente cuando una rama es costosa. La alternativa dplyr caso_cuando() Evita por completo el anidamiento y mantiene los tipos intactos:
library(dplyr) case_when( quantities < 20 ~ 'Not enough for today', quantities <= 30 ~ 'Average day', TRUE ~ 'What a great day!' )
La instrucción switch() en R
Cuando cada rama comprueba la igualdad de la misma variable, una larga cadena de `else if` se vuelve difĆcil de leer. `switch()` la reemplaza con una sola bĆŗsqueda.
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)
Su comportamiento se rige por tres reglas:
- Con un argumento de tipo carƔcter, switch() coincide exactamente con el nombre. No hay coincidencia parcial ni coincidencia de patrones.
- Un elemento final sin nombre actúa como valor predeterminado. Sin él, un valor que no coincide devuelve NULL de forma invisible, lo que suele ser una causa común de errores silenciosos.
- Con un argumento entero, switch() selecciona por posición: switch(2, āaā, ābā, ācā) devuelve ābā.
Utilice switch() para coincidencias exactas con un conjunto fijo de valores, y mantenga else if para rangos y condiciones compuestas, que switch() no puede expresar. Para aplicar una condición repetidamente sobre una secuencia, combĆnela con una en bucle mientras bucle.
lógico Operators en R Condiciones
Los operadores que construyen una condición se comportan de manera diferente entre sĆ, y esa diferencia importa.
| Operator | Significado | Ćselo en |
|---|---|---|
| & | Elemento por elemento Y | ifelse(), filter(), vectores completos |
| && | AND de un solo valor, cortocircuitos | si () y mientras () |
| | | O elemento por elemento | ifelse(), filter(), vectores completos |
| || | OR de valor Ćŗnico, cortocircuitos | si () y mientras () |
| ! | NO, niega la prueba | En cualquier lugar |
| %en% | ĀæEl valor estĆ” en este conjunto? | Reemplaza las cadenas OR largas |
Por qué es importante evitar los cortocircuitos. La forma doble se detiene tan pronto como se establece la respuesta, por lo que el lado derecho nunca se evalúa cuando el izquierdo ya decide el resultado. Esto permite escribir una clÔusula de protección de forma segura:
# Safe: length() is checked before x[1] is touched if (length(x) > 0 && x[1] > 10) print('ok')
Comparando con varios valores. Utiliza %in% en lugar de encadenar pruebas de igualdad, ya que es mĆ”s corto y mĆ”s difĆcil de escribir incorrectamente:
if (category %in% c('A', 'B')) { print('Reduced VAT rate applies') }
Una última advertencia: un solo signo de igual asigna un valor, no lo compara. Siempre escriba == dentro de una condición.
Sentencias condicionales en R: GuĆa rĆ”pida
A continuación se enumeran todos los elementos utilizados en este tutorial:
| Objetivo | Code |
|---|---|
| Dos ramas |
if (cond) { a } else { b } |
| Varias ramas |
if (c1) { a } else if (c2) { b } else { c } |
| Condición vectorizada |
ifelse(test, yes, no)
|
| Ramificación múltiple en un vector |
case_when(c1 ~ a, c2 ~ b, TRUE ~ c)
|
| BĆŗsqueda de coincidencia exacta |
switch(x, "A" = 1, "B" = 2, 0) |
| Prueba de membresĆa |
if (x %in% c("A", "B")) { } |

