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.

  • šŸ”€ Sintaxis bĆ”sica: if (condición) { } else { } ejecuta una rama cuando la prueba es VERDADERA y la otra cuando es FALSA.
  • šŸ”— MĆŗltiples sucursales: R escribe else if como dos palabras separadas; no hay palabra clave elif como en Python.
  • āš ļø Cuidado de los lĆ­mites: Utilice operadores de mayor o igual y menor o igual para evitar que algĆŗn valor pase por un hueco no deseado entre las ramas.
  • ⚔ Forma vectorizada: ifelse(test, yes, no) evalĆŗa un vector completo a la vez, cosa que if no puede hacer.
  • šŸ—‚ļø Coincidencia exacta: La función switch() reemplaza una larga cadena de pruebas de igualdad con una Ćŗnica bĆŗsqueda.
  • 🧮 Operator Choice: El signo & simple funciona elemento por elemento, mientras que la forma doble es para un solo VERDADERO o FALSO dentro de if.

Sentencia If Else Else If en R

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
}

Declaración si no

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")) { }

Preguntas Frecuentes

if maneja un único valor VERDADERO o FALSO y controla qué bloque de código se ejecuta. ifelse() es una función vectorizada que prueba cada elemento de un vector y devuelve un vector de resultados.

Utilice la forma doble dentro de las estructuras if y while, donde la condición debe tener un único valor y el cortocircuito protege el lado derecho. Utilice la forma simple para pruebas elemento a elemento en vectores completos.

Desde R 4.2, una condición if debe ser exactamente VERDADERA o FALSA; los vectores mÔs largos ahora generan un error en lugar de una advertencia. Utilice ifelse(), any() o all() según lo que desee.

Las condiciones determinan las reglas de ingenierĆ­a de caracterĆ­sticas, parada tempranaping comprobaciones durante el entrenamiento y decisiones de umbral en la salida del modelo. Se prefieren las formas vectorizadas como case_when() porque se adaptan a conjuntos de datos completos.

Sí. Los asistentes de IA pueden detectar errores como un valor límite que se extiende por todas las ramas o un único signo de igual utilizado para la comparación. Prueba tú mismo la cadena corregida con los valores límite.

Resumir este post con: