Menu
Coddy logo textTech

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] 10

R 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] 15
challenge icon

Desafío

Fácil

Completa la lista ops con tres funciones anónimas de un argumento:

  • double devuelve el argumento multiplicado por 2
  • square devuelve el argumento multiplicado por sí mismo
  • negate devuelve 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")
quiz iconPonte a prueba

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

Practica por tu cuenta: Compilador de R online