INF11 Scrivere Una Funzione

26
Programmazione in R Scrivere un programma in R

Transcript of INF11 Scrivere Una Funzione

Page 1: INF11 Scrivere Una Funzione

Programmazione in R

Scrivere un programma in R

Page 2: INF11 Scrivere Una Funzione

Concetto di funzione in R

R è un linguaggio funzionaleTutto si esprime attraverso una funzione

Scrivere un programma significa scrivere una funzione

Una funzione (function) è l’implementazione di un algoritmo a cui è stato dato un nome

Eseguire una funzione significa eseguire le istruzioni in essa contenute

Page 3: INF11 Scrivere Una Funzione

Modello di programmazione in R

Dati di input

Dati di output

Elaborazione

Il numero 36

Il numero 6

Radice quadrata

Due sequenze di DNA

La sottosequenzaIn comune

Allineamento

Page 4: INF11 Scrivere Una Funzione

Pipeline di elaborazioni

Dati di input

Dati di output

Elaborazione

Dati di output

Elaborazione

Elaborazione

L’output di una elaborazione può essere usata come input di un’altra elaborazione… La catena di elaborazioni che si ottiene è detta pipeline (da pipe che significa tubo in inglese)

Page 5: INF11 Scrivere Una Funzione

Scrivere un nuovo programma partendo da un problema

Individuare quali sono i dati di input

Individuare quali sono i dati di output

Individuare i passi elementari (istruzioni)Le istruzioni, tra quelle disponibili nel linguaggio che si vuole usare (es. R), per ottenere i dati di output a partire dai dati di input

Page 6: INF11 Scrivere Una Funzione

Esempio 1

Problema:

Calcolare l’area di un trapezio

Quali sono i dati di input?

Quali sono i dati di output? 

AC

B

Page 7: INF11 Scrivere Una Funzione

Esempio 1 individuare i passi elementari

Problema:Calcolare l’area di un trapezio

Input: A, B, COutput: areaPassi elementari: 

formula per calcolare l’area del trapezio (chi se la ricorda?) 

AC

B

Page 8: INF11 Scrivere Una Funzione

Un approccio per risolvere problemi complessi

Conosciuto nell’antichità come

Divide et impera

Un problema complesso può essere risolto scomponendolo in sottoproblemi piùsemplici

Page 9: INF11 Scrivere Una Funzione

Esempio 1 individuare i passi elementari

Problema:

Calcolare l’area di un trapezio

Input: A, B, C

Output: area

Passi elementari: L’area del trapezio può essere calcolata sommando le aree di figure 

più semplici: i due triangoli ai lati e il rettangolo centrale

AC

B

Page 10: INF11 Scrivere Una Funzione

Esempio 1 individuare i passi elementari

Passi elementari: triangoli <‐ (A‐B)*C/2rettangolo <‐ B*C

areaTrapezio <‐ triangoli + rettangolo

AC

B

Page 11: INF11 Scrivere Una Funzione

Incapsulare il tutto in una funzione R

areaTrapezio <‐ function(A,B,C) {triangoli <‐ (A‐B)*C/2rettangolo <‐ B*C

AT <‐ triangoli + rettangolo

return(AT)}

La sequenza di istruzioni che consente di ottenere il dato di output (area della campana). Costituiscono il cosiddetto “corpo della funzione”

Le variabili che conterranno i dati di input. Sono chiamati anche “parametri di ingresso”

Istruzione che restituisce il dato di output calcolato

Nome della funzione

AC

B

Page 12: INF11 Scrivere Una Funzione

I nomi per le variabili: conviene scegliere nomi che ne ricordano il significato

areaTrapezio <‐ function(baseMaggiore,baseMinore,altezza) {triangoli <‐ (baseMaggiore‐baseMinore)*altezza/2rettangolo <‐ baseMinore*altezza

AT <‐ triangoli + rettangolo

return(AT)}

Page 13: INF11 Scrivere Una Funzione

Anatomia di una funzione

NomeDellaFunzione <‐ function(ARG1,ARG2,ARG2,…) {istruzione nistruzione n…istruzione n

VariabileDiRitorno <‐ <espr>

return(VariabileDiRitorno)} Il corpo di una funzione è costituito da una 

parte centrale che esegue l’algoritmo ed un epilogo finale che prepara il risultato in una variabile che verrà restituita attraverso l’istruzione return()

Page 14: INF11 Scrivere Una Funzione

Perché incapsulare in una funzione?

Per dare un nome all’algoritmo che risolve il problema e richiamarlo ogni volta che ci occorre senza dover riscrivere le istruzioni

Le funzioni favoriscono il cosiddetto “riuso del codice” e la programmazione “modulare”(Divide et Impera). Algoritmi già risolti possono essere sfruttati senza doverli riscrivere di nuovo (come vedremo tra poco)

Page 15: INF11 Scrivere Una Funzione

Come si usa una funzione

Semplicemente scrivendo il nome della funzione fornendogli i dati di input

Per usare una funzione bisogna conoscere la “signature”:1) Nome2) Parametri di input previsti3) Il valore ritornato

Esempi

> areaTrapezio(20,10,3)> a <‐ areaTrapezio(20,10,3)

20  10  3

45

areaTrapezio

Page 16: INF11 Scrivere Una Funzione

Come si usa una funzione

In realtà l’invocazione di una funzione diventa un’istruzione che R valuta come se fosse una espressione

Quindi l’invocazione di funzione può essere parte di una espressione (aritmetica, ma come vedremo in seguito non solo)

Page 17: INF11 Scrivere Una Funzione

Esempi

Cosa succede se…

> areaTrapezio(20,10,3) + 5> a <‐ 10> b <‐ 2*areaTrapezio(20,10,3) + a

> areaTrapezio(a,10,3)> areaTrapezio(20,10,3+a)> areaTrapezio(areaTrapezio(2,1,1),10,3)

> c <‐ areaTrapezio(2,1,1)> areaTrapezio(c,10,3)

… anche gli argomenti di input della funzione possono essere il risultato di un espressione

Page 18: INF11 Scrivere Una Funzione

Esempio 2

Problema:

Calcolare l’area di una campana

Quali sono i dati di input?

Quali sono i dati di output? 

B

AD

C

Page 19: INF11 Scrivere Una Funzione

Scomposizione del problema

B

A

C

DC

B

DA

Sottoproblema 1

Sottoproblema 2

Sottoproblema 3

B/2

Page 20: INF11 Scrivere Una Funzione

Scriviamo la funzione areaCampana

areaCampana <‐ function(A,B,C,D) {raggio <‐ B/2semicerchio <‐ raggio*raggio*3.14/2rettangolo <‐ B*Ctrapezio <‐ areaTrapezio(A,B,D)AC <‐ semicerchio + rettangolo + trapezioreturn(AC)

}

B

AD

C

Page 21: INF11 Scrivere Una Funzione

Le funzioni di R

R fornisce un insieme di funzioni preinstallate

Ognuno può contribuire ad arricchire il repertorio di funzioni di R scrivendone di nuove e mettendole a disposizione dei programmatori e/o utilizzatori

In R le funzioni sono organizzate in package

Es. Bioconductor è un insieme di package per la bioinformatica

Page 22: INF11 Scrivere Una Funzione

Alcune funzioni di R già realizzate e pronte all’uso

Funzioni Matematichecos(x) sin(x) tan(x) acos(x) asin(x) atan(x) log10(x)logb(x,b)sqrt(x)

Page 23: INF11 Scrivere Una Funzione

Esercizi

> A <‐ 3 * sqrt(2*2)> A <‐ A + sqrt(sin())> A <‐ 3 * sqrt(2*2)

Page 24: INF11 Scrivere Una Funzione

Esercizi

Scrivere una funzione etaInAnni(X) che prende come input l’anno di nascita di una persona e restituisce la sua età in anni.

Scrivere una funzione etaInGiorni(X) che prende come input la data di nascita di una persona (giorno, mese e anno) e restituisce la sua età in giorni (assumere che i giorni in un anno sia 360 e quelli in un mese 30, trascurando la presenza di anni bisestili e mesi di 31 e 28 giorni).

Note:Per entrambi gli esercizi è necessario leggere la data corrente. Tale informazione è disponibile in quanto un calcolatore 

possiede un orologio di sistema. Le istruzioni per leggere le informazioni provenienti dall’orologio di sistema sono le seguenti:

Restituisce l’anno correnteas.POSIXlt(Sys.time())$year+1900

Restituisce il mese correnteas.POSIXlt(Sys.time())$mon+1

Restituisce il giorno correnteas.POSIXlt(Sys.time())$mday

Page 25: INF11 Scrivere Una Funzione

Soluzione 1

EtaInAnni<‐function(A){B<‐as.POSIXlt(Sys.time())$year+1900C<‐B‐Areturn(C) 

}

Page 26: INF11 Scrivere Una Funzione

Scrivere una funzione per calcolare il peso ideale, secondo una delle seguenti formule:

Formula di LorenzPeso ideale Uomini = altezza in cm – 100 ‐ (altezza in cm – 150)/4Peso ideale Donne = altezza in cm – 100 ‐ (altezza in cm – 150)/2

Formula di BrocaPeso ideale Maschi = altezza in cm – 100Peso ideale Femmine = altezza in cm – 104

Formula di Wan der VaelPeso ideale Uomini = (altezza in cm ‐ 150) x 0.75 + 50Peso ideale Donne = (altezza in cm ‐ 150) x 0.6 + 50

Formula di BertheanPeso ideale = 0.8 x (altezza in cm – 100) + età/2

Formula di PerraultPeso ideale = Altezza in cm – 100 + età/10 x 0.9

Formula di KeysPeso ideale Uomini = (altezza in m)² x 22.1Peso ideale Donne = (altezza in m)² x 20.6

Formula di TraviaPeso ideale = (1,012 x altezza in cm) – 107.5