La función switch()
Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 47 de 64.
switch(x, name = value, ...) compara el texto x con los nombres y devuelve el valor del que coincide. Reemplaza una cadena larga de comparaciones else if con la misma variable:
size <- "m"
price <- switch(size, s = 2.5, m = 3, l = 3.5)
print(price)Salida:
[1] 3Un último valor sin nombre es el valor predeterminado, que se utiliza cuando nada coincide. Sin un valor predeterminado, un switch() sin coincidencias devuelve NULL de forma invisible:
day <- "fri"
print(switch(day, sat = "rest", sun = "rest", "work"))
print(is.null(switch("x", a = 1)))Salida:
[1] "work"
[1] TRUEUn valor vacío pasa al siguiente, por lo que varios nombres pueden compartir un resultado:
kind <- function(day) switch(day, sat = , sun = "weekend", "weekday")
print(kind("sun"))
print(kind("tue"))Salida:
[1] "weekend"
[1] "weekday"Los valores pueden ser bloques completos de código entre llaves, y el resultado es la última expresión del bloque que se ejecuta:
area <- function(shape, a, b = a) {
switch(shape,
square = a^2,
rect = a * b,
circle = {
r <- a / 2
round(pi * r^2, 2)
},
NA)
}
print(area("rect", 3, 4))
print(area("circle", 10))Salida:
[1] 12
[1] 78.54Desafío
FácilCompleta calculate(a, op, b). op es uno de plus, minus, times y over. Devuelve el resultado de aplicarlo a a y b, o unknown operation para cualquier otro op. Dividir entre cero devuelve cannot divide by zero.
El código proporcionado lee a, op y b (uno por línea) e imprime el valor devuelto.
Pruébalo tú mismo
calculate <- function(a, op, b) {
# Escribe tu código aquí
"unknown operation"
}
# Código de entrada/salida suministrado: déjalo tal como está
input <- suppressWarnings(readLines(file("stdin")))
cat(calculate(as.numeric(input[1]), input[2], as.numeric(input[3])), sep = "\n")
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo
1Cadenas a fondo
Subcadenas con substr()Formateo con sprintf()Dividir y unirBuscar cadenasReemplazar textoRepaso - Constructor de nombres de usuario4Matrices
Creación de matricesIndexación de matricesResúmenes de filas y columnasAritmética de matricesRepaso: tabla de asientos10Flujo de control avanzado
La función switch()ifelse() vectorizadorepeat y breakFunciones recursivasRepaso - Clasificador de calificaciones2Búsquedas clave-valor
Búsquedas en vectores con nombreComprobar clavesAñadir y eliminar clavesRecorrer nombresRepaso: panel bursátil5Proyecto - Libro de calificaciones
Añadir estudiantesRegistrar calificaciones3Conjuntos y conteo
Valores únicosOperaciones con conjuntosPruebas de pertenenciaConteo con table()Repaso: invitados al evento6Funciones como valores
Funciones anónimasPasar funcionesDevolver funcionesClausuras con estadoRepaso: reglas de descuento9Marcos de datos
Creación de marcos de datosColumnas y filasFiltrado de filasAdición y ordenaciónRepaso - Informe de ventas12Proyecto: Rastreador de gastos
Registro de gastosGasto totalPractica por tu cuenta: Compilador de R online