Programación en R para Data Science

Creación de funciones y familia apply

Author

Jesús Turpín

Published

October 24, 2023

Funciones en R

Las funciones en R son bloques de código que están diseñados para realizar una tarea específica y son fundamentales en la programación en R. Una función es esencialmente una pieza de código que toma uno o más valores, realiza alguna operación y devuelve un resultado.

Funciones creadas por el usuario:

La estructura básica de una función en R es:

nombre_funcion <- function(arg1, arg2, ...) {
  # Cuerpo de la función
  return(resultado)
}
suma <- function(a, b) {
  return(a + b)
}
suma(5, 3)  # Resultado: 8
[1] 8

Funciones Anónimas (Lambda)

También son creadas por el usuario pero su creación es “al vuelo”, es decir, no se necesita asignar un nombre. Estas son útiles para operaciones rápidas que no requieren ser reutilizadas, pero útiles como argumento de otras funciones que requieren como atributo una función y esta no existe o se quiere personalizar.

(function(x) x**2)(5)  # Resultado: 25
[1] 25

La familia apply

Las funciones de la familia apply proporcionan una forma eficiente y concisa de aplicar una función a los elementos de una estructura de datos, sin la necesidad de bucles explícitos. Estas funciones pueden ser más rápidas y más legibles que sus contrapartes de bucle.

sapply

Aplica una función a los elementos de una lista o vector, simplificando el resultado si es posible.

strings <- c("apple", "banana", "cherry")
sapply(strings, nchar) # nchar es la función a aplicar a todos los elementos de strings
 apple banana cherry 
     5      6      6 

lapply

Funciona de manera similar a sapply, pero siempre devuelve una lista.

nums <- list(a = 1:3, b = 4:6, c = 7:9)
lapply(nums, function(x) x**2) 
$a
[1] 1 4 9

$b
[1] 16 25 36

$c
[1] 49 64 81
m <- sapply(nums, function(x) x**2) 
m
     a  b  c
[1,] 1 16 49
[2,] 4 25 64
[3,] 9 36 81

apply

apply(m, 2, sum)
  a   b   c 
 14  77 194 
apply(m, 1, sum)
[1]  66  93 126
mat1 <- matrix(1:9, nrow=3, byrow=TRUE)
mat2 <- 2*mat1
mat3 <- 3*mat1
arr <- array(data = c(mat1, mat2, mat3), dim = c(3, 3, 3))
arr
, , 1

     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

, , 2

     [,1] [,2] [,3]
[1,]    2    4    6
[2,]    8   10   12
[3,]   14   16   18

, , 3

     [,1] [,2] [,3]
[1,]    3    6    9
[2,]   12   15   18
[3,]   21   24   27

¿Qué hace apply en cada uno de los 3 casos con la función sum en el array de 3 dimensiones?

apply(arr, 1, sum)
apply(arr, 2, sum)
apply(arr, 3, sum)