La función switch en R

Introducción a R Estructuras de control
La función switch en R

La función switch evalúa un índice o una cadena de texto y elige una opción entre una lista de alternativas. En este tutorial repasaremos la sintaxis y cómo utilizar esta función con diferentes ejemplos.

Sintaxis de la sentencia switch

La función switch toma como entrada un número o una cadena de caracteres y una lista de alternativas. La sintaxis de esta función es la siguiente:

switch(EXPR, # Expresión (Número o carácter)
       ...   # Lista de alternativas (cualquier objeto)
)

# Ejemplo:
switch(expresion,
       valor1 = {
         # Código si 'expresion' es "valor1"
       },
       valor2 = {
         # Código si 'expresion' es "valor2"
       }
)

R también proporciona el siguiente snippet para programar más rápido:

switch(object,       # Número o carácter
       case = action # Casos y acciones (nombres y objetos)
)

La función switch funciona de dos formas distintas dependiendo de si el primer argumento es un número o una cadena de caracteres. Las revisaremos en los ejemplos siguientes.

Ejemplos

Por índice

Si introduces un número entero y una lista de objetos, la función switch devolverá el objeto situado en el índice correspondiente definido por el número entero.

El siguiente ejemplo devuelve "Segundo" porque es el segundo elemento de la lista de alternativas y el valor pasado como primer argumento era 2.

valor <- 2

switch(valor, "Primero", "Segundo", "Tercero")
"Segundo"

Observa que puedes introducir cualquier objeto en la lista de alternativas, como vectores, matrices, data frames, etc. En el ejemplo siguiente devolvemos el tercer elemento de la lista, que es un data frame.

valor <- 3

switch(valor, "A", 2:3, data.frame(x = 1:3, y = 2:4))
  x y
1 1 2
2 2 3
3 3 4

Si el número entero es mayor que el número de elementos de la lista de alternativas, la función devolverá NULL.

Por nombre

Si el valor de EXPR es una cadena de caracteres se buscará el elemento que coincida exactamente con uno de los nombres de la lista de opciones y se devolverá el objeto correspondiente. En el siguiente ejemplo introducimos "tipo_1", para que se devuelva el objeto que corresponde a la primera alternativa.

valor <- "tipo_1"

switch(valor,
  tipo_1 = "Primero",
  tipo_2 = 2,
  tipo_3 = "Tercero")
"Primero"

Ahora, si introducimos "tipo_2" la función buscará el elemento cuyo nombre sea tipo_2, que en este caso es el segundo, y devolverá su objeto correspondiente.

valor <- "tipo_2"

switch(valor,
  tipo_1 = "Primero",
  tipo_2 = 2,
  tipo_3 = "Tercero")
2

Expresiones complejas

Ten en cuenta que también puedes añadir expresiones complejas dentro de cada una de las opciones añadiendo su código entre llaves. El siguiente ejemplo calcula la raíz cuadrada de un número en función de la opción seleccionada.

valor <- "G_2"

switch(valor,
       "G_1" = {x <- 10
                sqrt(x)
                },
       "G_2" = {x <- 9
                sqrt(x)
                },
)
3

Usando switch dentro de una función

La sentencia switch también puede utilizarse dentro de una función. Un caso de uso común es cambiar entre diferentes alternativas en base al valor que tome un argumento.

En el siguiente ejemplo creamos una función que toma dos argumentos numéricos (x e y) y otro argumento llamado method que puede tomar dos valores: sum o mean para calcular la suma o la media de x e y, respectivamente. Además, si introduces una cadena diferente a method, la función arrojará un error.

# Función de muestra
fun <- function(x, y, method) {
  
  switch(method,
    "sum" = x + y,
    "mean" = mean(c(x, y)),
    stop('Input "sum" or "mean" to method')
  )
  
}

# Ejemplos
fun(5, 10, method = "sum")  # 15
fun(5, 10, method = "mean") # 7.5
fun(5, 10, method = "mode") # Error in fun(5, 10, "mode") : Input "sum" or "mean" to method

R version 4.3.2 (2023-10-31 ucrt)