La programmazione funzionale in R

La programmazione funzionale è un paradigma di programmazione dove si enfatizza l'uso di funzioni. In R, questo approccio è particolarmente efficace, data la natura del linguaggio.

Come funziona? Nella programmazione funzionale i cicli sono sostituiti con le ricorsioni delle funzioni. In pratica una funzione chiama se stessa più volte. Inoltre, utilizza anche funzioni di ordine superiore, ossia funzioni che prendono altre funzioni come argomenti o restituiscono una funzione come risultato.

Nella programmazione funzione dovrai distinguere tra due tipi di funzioni

  • Le funzioni pure
    Le funzioni pure sono quelle funzioni che svolgono dei calcoli matematici e restituiscono un risultato, senza alcun effetto collaterale come stampe sullo schermo, modifiche a variabili globali, ecc.
  • Le funzioni di ordine superiore
    Le funzioni di ordine superiore sono funzioni che accettano anche altre funzioni come argomento.

Ricorda sempre di cercare di rendere le tue funzioni il più pure possibile e di sfruttare le funzioni di ordine superiore per richiamarle.

Per spiegare questi concetti è utile fare qualche esempio pratico. 

Le funzioni di ordine superiore

Le funzioni di ordine superiore sono funzioni che accettano anche altre funzioni come argomento e le applicano sui dati.

Ad esempio, immagina di voler raddoppiare ogni elemento in una lista.

Puoi farlo utilizzando una funzione pura e una funzione di ordine superiore.

  1. raddoppia <- function(x) {
  2.    return(x * 2)
  3. }
  4. numeri <- c(1, 2, 3, 4, 5)
  5. numeri_raddoppiati <- sapply(numeri, raddoppia)
  6. print(numeri_raddoppiati)

In questo esempio, sapply  è una funzione di ordine superiore che ha come argomenti una lista (1, 2, 3, 4, 5) e una funzione raddoppia().

Poi applica la funzione raddoppia() a ogni elemento della lista.

Il risultato finale è il seguente:

2  4  6  8 10

Tutti gli elementi della lista sono stati raddoppiati.

Le funzioni di ordine superiore con le funzioni anonime

Una funzione di ordine superiore può prendere anche funzioni anonime come argomento

Ecco un esempio pratico:

  1. numeri <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  2. numeri_pari <- Filter(function(x) x %% 2 == 0, numeri)
  3. print(numeri_pari)

Questo programma utilizza una funzione anonima per riconoscere i numeri pari.

La funzione Filter, invece, è una funzione di ordine superiore che prende una funzione anonima e una lista come argomenti.

In questo modo il programma seleziona e visualizza i numeri pari all'interno della lista.

2 4 6 8 10

E' un altro esempio di funzione di ordine superiore. 

La ricorsione

La ricorsione è un processo nel quale una funzione chiama se stessa durante la sua esecuzione.

E' utile per dividere un problema complesso in sottoproblemi più semplici.

Ad esempio, supponiamo di voler calcolare il fattoriale di un numero, che è un classico esempio di utilizzo della ricorsione.

  1. fattoriale <- function(n) {
  2. if (n == 0) {
  3. return(1)
  4. } else {
  5. return(n * fattoriale(n - 1))
  6. }
  7. }
  8. print(fattoriale(5))

In questo esempio, fattoriale chiama se stessa fino a quando non raggiunge la condizione di base (n == 0).

Una volta raggiunta la condizione di base, moltiplica tutti i risultati ottenuti nelle ricorsioni precedenti.

Il risultato finale è il fattoriale di cinque ovvero 5! = 5·4·3·2·1 = 120

120

La programmazione funzionale in R può sembrare inizialmente astratta, ma ti offre un potente strumento per scrivere codice in modo più chiaro e compatto.

Sperimentare con le funzioni pure, la ricorsione e le funzioni di ordine superiore può notevolmente arricchire la tua capacità di scrivere programmi efficienti nel linguaggio R.

 




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin