Funciones anónimas
Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 27 de 64.
En R, una función es un valor como un número o una cadena. function(x) x * 2 crea una función sin darle un nombre, y el valor de su última expresión es lo que devuelve:
double <- function(x) x * 2
print(double(21))
print((function(x) x + 1)(9))Salida:
[1] 42
[1] 10R 4.1 añadió una forma abreviada: \(x) significa lo mismo que function(x). Usa llaves cuando el cuerpo necesite varias líneas:
square <- \(x) x^2
label <- function(x) {
size <- if (x > 10) "big" else "small"
paste(x, "is", size)
}
print(square(4))
print(label(12))Salida:
[1] 16
[1] "12 is big"Como las funciones son valores, una lista puede contener varias de ellas bajo distintos nombres. ops[["inc"]] es una función, por lo que ops[["inc"]](5) la llama:
ops <- list(inc = \(x) x + 1, neg = \(x) -x)
print(ops[["inc"]](5))
print(names(ops))Salida:
[1] 6
[1] "inc" "neg"Una función puede aceptar varios argumentos y asignar valores predeterminados a algunos de ellos, exactamente igual que una función con nombre:
area <- \(w, h = w) w * h
print(area(3))
print(area(3, 5))Salida:
[1] 9
[1] 15Desafío
FácilCompleta la lista ops con tres funciones anónimas de un argumento:
doubledevuelve el argumento multiplicado por 2squaredevuelve el argumento multiplicado por sí mismonegatedevuelve el argumento con el signo invertido
El código proporcionado lee el nombre de una operación y un número, llama a esa función desde ops e imprime el resultado.
Pruébalo tú mismo
ops <- list(
# Escribe tu código aquí
double = function(x) x
)
# Código de entrada/salida suministrado: déjalo tal como está
input <- suppressWarnings(readLines(file("stdin")))
f <- ops[[input[1]]]
cat(f(as.numeric(input[2])), 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 asientos2Bú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