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)