La programació funcional és un paradigma de programació que tracta el càlcul com l'avaluació de funcions matemàtiques i evita canvis d'estat i dades mutables. En R, aquest paradigma és molt útil per escriure codi més net, modular i fàcil de mantenir. En aquesta secció, explorarem els conceptes clau de la programació funcional en R, incloent-hi funcions d'ordre superior, aplicació de funcions i funcions anònimes.

Conceptes Clau

Funcions d'Ordre Superior

Les funcions d'ordre superior són funcions que poden prendre altres funcions com a arguments o retornar funcions com a resultats. Aquestes funcions són fonamentals en la programació funcional.

Exemple:

# Definim una funció que pren una altra funció com a argument
apply_function <- function(f, x) {
  return(f(x))
}

# Definim una funció simple
square <- function(x) {
  return(x^2)
}

# Apliquem la funció 'square' a un valor
result <- apply_function(square, 5)
print(result)  # Output: 25

Funcions Anònimes

Les funcions anònimes (o lambda) són funcions que es defineixen sense nom. Són útils per a operacions ràpides i senzilles que no necessiten una definició formal.

Exemple:

# Utilitzem una funció anònima per elevar al quadrat un número
result <- apply_function(function(x) x^2, 5)
print(result)  # Output: 25

Funcions d'Aplicació

Les funcions d'aplicació permeten aplicar una funció a cada element d'una estructura de dades, com ara un vector o una llista. Les funcions lapply, sapply, vapply i mapply són exemples comuns en R.

Exemple:

# Definim un vector
numbers <- c(1, 2, 3, 4, 5)

# Apliquem una funció anònima a cada element del vector utilitzant 'lapply'
squared_numbers <- lapply(numbers, function(x) x^2)
print(squared_numbers)  # Output: list(1, 4, 9, 16, 25)

# Utilitzem 'sapply' per obtenir un vector en lloc d'una llista
squared_numbers <- sapply(numbers, function(x) x^2)
print(squared_numbers)  # Output: c(1, 4, 9, 16, 25)

Exercicis Pràctics

Exercici 1: Funcions d'Ordre Superior

Escriu una funció apply_twice que prengui una funció f i un valor x, i apliqui f a x dues vegades.

Solució:

apply_twice <- function(f, x) {
  return(f(f(x)))
}

# Prova la funció amb una funció anònima
result <- apply_twice(function(x) x + 3, 5)
print(result)  # Output: 11

Exercici 2: Funcions Anònimes

Utilitza una funció anònima per crear una llista de valors al quadrat d'un vector de números.

Solució:

numbers <- c(1, 2, 3, 4, 5)
squared_numbers <- lapply(numbers, function(x) x^2)
print(squared_numbers)  # Output: list(1, 4, 9, 16, 25)

Exercici 3: Funcions d'Aplicació

Utilitza sapply per calcular el factorial de cada número en un vector.

Solució:

factorial_vector <- function(x) {
  if (x == 0) return(1)
  return(x * factorial_vector(x - 1))
}

numbers <- c(1, 2, 3, 4, 5)
factorials <- sapply(numbers, factorial_vector)
print(factorials)  # Output: c(1, 2, 6, 24, 120)

Resum

En aquesta secció, hem explorat els conceptes bàsics de la programació funcional en R, incloent-hi funcions d'ordre superior, funcions anònimes i funcions d'aplicació. Hem vist com aquestes tècniques poden ajudar a escriure codi més modular i mantenible. A mesura que avancem en el curs, aquests conceptes seran fonamentals per a la manipulació i l'anàlisi de dades de manera eficient.

Programació en R: De Principiant a Avançat

Mòdul 1: Introducció a R

Mòdul 2: Manipulació de Dades

Mòdul 3: Visualització de Dades

Mòdul 4: Anàlisi Estadística

Mòdul 5: Gestió Avançada de Dades

Mòdul 6: Conceptes Avançats de Programació

Mòdul 7: Aprenentatge Automàtic amb R

Mòdul 8: Temes Especialitzats

Mòdul 9: Projecte i Estudis de Cas

© Copyright 2024. Tots els drets reservats