Saltar al contenido principal
eLearner.app
Módulo 3 · Lección 1 de 25/10 en el curso~12 min
Lecciones del módulo (1/2)

Escribir Funciones

In R, las funciones son objetos en todos los sentidos (first-class citizens) y permiten estructurar el código en bloques modulares, reutilizables y bien organizados.

Definición de una Función

Para definir una función se utiliza la palabra clave function y se asigna el objeto creado a una variable (el nombre de la función) mediante el operador de asignación <-:

Code
# Definición de una función simple
greet_user <- function() {
  print("Hello, User!")
}

# Invocación de la función
greet_user()

Parámetros y Valores de Retorno

Las funciones pueden aceptar uno o más parámetros. Para devolver explícitamente un valor, se utiliza la función return(). Si se omite return(), R devolverá automáticamente el valor de la última expresión evaluada en el cuerpo de la función.

Code
# Función que suma dos números y devuelve el resultado
add_numbers <- function(a, b) {
  sum_result <- a + b
  return(sum_result)
}

total <- add_numbers(5, 7)
print(total) # Imprime 12

Argumentos Predeterminados (Default)

Es posible especificar valores predeterminados para los parámetros de una función. Si al invocarla no se proporciona el argumento, R utilizará el valor predeterminado (de default):

Code
# La función usa un porcentaje de descuento predeterminado del 10% (0.10)
apply_discount <- function(price, discount = 0.10) {
  discounted_price <- price * (1 - discount)
  return(discounted_price)
}

# Utiliza el valor predeterminado (10%)
print(apply_discount(100)) # Imprime 90

# Especifica un descuento personalizado (20%)
print(apply_discount(100, 0.20)) # Imprime 80

Devolver varios valores con Listas

Dado que una función en R puede devolver directamente un solo objeto mediante return(), si tenemos la necesidad de devolver múltiples valores (quizás de diferente tipo o longitud), podemos agruparlos dentro de una lista (list):

Code
get_stats <- function(v) {
  stats <- list(
    mean_val = mean(v),
    max_val = max(v)
  )
  return(stats)
}

results <- get_stats(c(10, 20, 30))
print(results$mean_val) # Imprime 20

Funciones Anónimas y sapply

Las funciones anónimas (es decir, funciones sin nombre definidas sobre la marcha) son extremadamente útiles cuando se combinan con funciones como sapply() para aplicar transformaciones rápidas sobre los elementos de un vector o una lista.

En R moderno (a partir de la versión 4.1.0) es posible definir funciones anónimas usando la sintaxis abreviada \(x) además de la clásica function(x):

Code
v <- c(1, 2, 3)

# Uso de sapply con función anónima clásica
sapply(v, function(x) x^2) # 1 4 9

# Uso de sapply con sintaxis abreviada (R >= 4.1.0)
sapply(v, \(x) x^2) # 1 4 9

Pruébalo tú

Ejercicio#r.m3.l1.e1
Intentos: 0Cargando...

Define una función llamada double_value que acepte un único argumento x y devuelva su doble (x * 2) mediante return().

Cargando editor...
Mostrar pista

Usa la sintaxis: double_value <- function(x) { return(x * 2) }

Solución disponible después de 3 intentos

Ejercicio#r.m3.l1.e2
Intentos: 0Cargando...

Define una función llamada calculate_area que acepte dos argumentos: width y height. La función debe devolver su producto mediante return().

Cargando editor...
Mostrar pista

Define la función con parámetros width y height, y devuelve width * height.

Solución disponible después de 3 intentos

Ejercicio#r.m3.l1.e3
Intentos: 0Cargando...

Define una función llamada calculate_tax que acepte un argumento obligatorio amount y un argumento opcional rate con valor predeterminado de 0.22. Devuelve el producto amount * rate.

Cargando editor...
Mostrar pista

Usa: calculate_tax <- function(amount, rate = 0.22) { return(amount * rate) }

Solución disponible después de 3 intentos

Ejercicio#r.m3.l1.e4
Intentos: 0Cargando...

Define una función llamada analyze_vector que acepte un vector v. La función debe devolver una lista que contenga dos elementos llamados sum (la suma del vector, calculada con sum(v)) y len (la longitud del vector, calculada con length(v)).

Cargando editor...
Mostrar pista

Usa la sintaxis: analyze_vector <- function(v) { return(list(sum = sum(v), len = length(v))) }

Solución disponible después de 3 intentos

Ejercicio#r.m3.l1.e5
Intentos: 0Cargando...

Dado el vector v, usa la función sapply() con una función anónima para triplicar el valor de cada elemento (multiplicándolo por 3). Guarda el resultado en la variable tripled.

Cargando editor...
Mostrar pista

Usa: tripled <- sapply(v, function(x) x * 3)

Solución disponible después de 3 intentos