Sentencia if en R

Introducción a R Estructuras de control
Crea condicionales if else en el lenguaje de programación R

El if en R, al igual que en otros lenguajes de programación, es una sentencia condicional. En este tutorial mostraremos la sintaxis y algunos ejemplos de cómo usar if y else en R, con condiciones simples y anidadas. También mostraremos cómo usar la función ifelse, que es la versión vectorizada de la condición if y else en R.

Sintaxis de la sentencia if else en R

Las condiciones if else son muy intuitivas. Debes definir una o más condiciones que quieres que se cumplan para ejecutar algún código y, si no, ejecutar otro código. Por lo tanto, la condición debe devolver TRUE si la condición se cumple o FALSE si no.

SI la condición se cumple, ENTONCES se ejecuta un código, EN OTRO CASO, se ejecuta otro código.

La sintaxis del if else en R es como sigue:

if (Condición) { # La condición debe devolver TRUE o FALSE
    # Ejecuta un código
} else {
    # Ejecuta otro código
}

También puedes escribir sentencias if en una sola línea sin llaves, pero generalmente no se recomienda, ya que podrías cometer errores de sintaxis en el código.

if (Condición) print("Código") else print("Más código")

Recuerda que también puedes usar esta sentencia condicional SIN el else.

Si necesitas que se cumplan varias condiciones puedes crear if anidados (if else if). Esto significa que puedes llamar más condiciones if else dentro de tus condiciones previas. En el siguiente bloque de código mostramos un ejemplo de un if anidado dentro del primer else. Puedes anidar tantos ifs como quieras.

if (Condición) { # La condición debe devolver TRUE o FALSE
    # Código
} else {
    # Código
    if(Condición 2) { # La condición debe devolver TRUE o FALSE
        # Código
    } else {
        # Más código
    }
} 

Ten en cuenta que dentro de ‘Condición’ tienes que usar operadores relacionales o comparativos, como AND (&), OR (|), o IGUAL A (==), entre otros.

Ejemplos de uso de if en R

Ahora vamos a mostrar algunos casos elaborados de uso de las sentencias if else en R. Primero, vamos a evaluar la siguiente función que depende de x:

\[f(x)= \begin{cases} 0, & \text{si}\ x < 0 \\ x/10, & \text{si}\ 0 \leq x \leq 10 \\ 1, & \text{si}\ x > 10 \end{cases}\]

Para ese propósito, creamos una función llamada f y dentro de la función creamos una condición if anidada para trabajar con todos los casos posibles.

f <- function(x) {
    if (x < 0) {
        0
    } else {
        if (x <= 10) {
            x / 10
        } else {
            1
        }
     }
  }

# Llamamos a la función
f(-1)  # 0
f(5)   # 0.5
f(100) # 1

En segundo lugar, vamos a definir una función para verificar si algún número es par o impar. Para verificarlo, comprobaremos si el módulo del número es igual a 0 o no e imprimiremos el resultado correspondiente.

is_even <- function(x) {
    if (x %% 2 == 0) {
        print("x es par")
    } else {
        print("x es impar")
    } 
}

# Llamamos a la función
is_even(5)  # x es impar
is_even(10) # x es par

La sentencia ifelse en R

En R, hay muchas funciones vectorizadas. La función ifelse es la versión vectorizada del condicional if else. Supongamos que quieres ejecutas un if en R con la siguiente estructura:

if (seq(1, 5) < 5) {
  print(TRUE)
} else {
 print(FALSE)
}

Observa que estás tratando de comparar un vector numérico con un número entero. En consecuencia obtendrás el siguiente error:

Warning message: In if (seq(1, 5) < 5) { : la condicion tiene longitud > 1 y solo el primer elemento será usado.

Esto significa que la condición solo compara el primer elemento del vector, ya que la condición if solo devuelve TRUE o FALSE, y no un vector lógico. Para ello, debes utilizar la función ifelse, que tiene la siguiente sintaxis.

ifelse(vector_condicional, valor_si_TRUE, vvalor_si_FALSE)

Ahora, con esta función, se evaluarán todos los elementos del vector y la función devolverá un vector lógico.

ifelse(seq(1, 5) < 5, TRUE, FALSE)
 TRUE  TRUE  TRUE  TRUE FALSE

También puedes evaluar varias condiciones utilizando anidaciones con la función ifelse. Ten en cuenta que puedes anidar hasta 50 condiciones de esta forma.

ifelse(vector_condicional,
       ifelse(vector_condicional_si_TRUE, value_if_TRUE, valor_si_FALSE),
       ifelse(vector_condicional_si_FALSE, value_if_TRUE, valor_si_FALSE))

R limita el número de ifelse a 50 líneas de ifelse anidados.

Ejemplos con la función ifelse

Supón que deseas clasificar los siguientes datos:

x <- c("hombre", "hombre", "mujer", "hombre", "mujer")
y <- c(10, 14, 80, 56, 27)

El vector de caracteres x representa si el individuo es un hombre o una mujer y el vector numérico y representa la edad del individuo correspondiente. En este ejemplo, clasificaremos a todos los individuos como hombres / mujeres adultos o menores de edad.

ifelse(x == "hombre", ifelse(y > 18, "Hombre adulto", "Hombre menor de edad"),
        ifelse(y > 18, "Mujer adulta", "Mujer menor de edad"))
"Hombre menor de edad" "Hombre menor de edad" "Mujer adulta" "Hombre adulto" "Mujer adulta"

Ahora, supongamos que queremos establecer como 1 las personas con más de 30 años o menos de 10 y 0 en el otro caso. Para ello podemos utilizar el operador |.

ifelse (y > 30 | y <= 10, 1, 0) 
1 0 1 1 0