Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Scrivere un programma in R
Concetto di funzione in R
R è un linguaggio funzionale
Tutto 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
Modello di programmazione in R
Due sequenze
Dati di input Il numero 36 di DNA
La sottosequenza
Dati di output Il numero 6 In comune
Pipeline di elaborazioni
Dati di input L’output di una elaborazione può
essere usata come input di
un’altra elaborazione… La catena
Elaborazione di elaborazioni che si ottiene è
detta pipeline (da pipe che
significa tubo in inglese)
Dati di output
Elaborazione
Dati di output
Elaborazione
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
Esempio 1
B
Problema:
C
Calcolare l’area di un trapezio A
Quali sono i dati di input?
Quali sono i dati di output?
Esempio 1
individuare i passi elementari
Problema: B
C
Calcolare l’area di un trapezio A
Input: A, B, C
Output: area
Passi elementari:
formula per calcolare l’area del trapezio
(chi se la ricorda?)
Un approccio per risolvere
problemi complessi
Conosciuto nell’antichità come
Divide et impera
Un problema complesso può essere risolto
scomponendolo in sottoproblemi più
semplici
Esempio 1
individuare i passi elementari
Problema: B
C
Calcolare l’area di un trapezio A
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
Esempio 1
individuare i passi elementari
B
Passi elementari:
triangoli <‐ (A‐B)*C/2 C
A
rettangolo <‐ B*C
rettangolo <‐ B*C
AT <‐ triangoli + rettangolo
return(AT) La sequenza di istruzioni che
} Istruzione che restituisce il
consente di ottenere il dato di
output (area della campana).
dato di output calcolato
Costituiscono il cosiddetto “corpo
della funzione”
I nomi per le variabili:
conviene scegliere nomi che ne ricordano il significato
AT <‐ triangoli + rettangolo
return(AT)
}
Anatomia di una funzione
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()
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)
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) Nome
2) Parametri di input previsti
3) Il valore ritornato 20 10 3
Esempi
areaTrapezio
> areaTrapezio(20,10,3)
> a <‐ areaTrapezio(20,10,3)
45
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)
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
Esempio 2
Problema:
C
Calcolare l’area di una campana B
D
A
Quali sono i dati di input?
Quali sono i dati di output?
Scomposizione del problema
Sottoproblema 1
B/2
C Sottoproblema 2
B
C
B
D
A
D
Sottoproblema 3
A
Scriviamo la funzione areaCampana
AC <‐ semicerchio + rettangolo + trapezio
return(AC)
}
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
Alcune funzioni di R già realizzate e
pronte all’uso
Funzioni Matematiche
cos(x)
sin(x)
tan(x)
acos(x)
asin(x)
atan(x)
log10(x)
logb(x,b)
sqrt(x)
Esercizi
> A <‐ 3 * sqrt(2*2)
> A <‐ A + sqrt(sin())
> A <‐ 3 * sqrt(2*2)
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 corrente
as.POSIXlt(Sys.time())$year+1900
Restituisce il mese corrente
as.POSIXlt(Sys.time())$mon+1
Restituisce il giorno corrente
as.POSIXlt(Sys.time())$mday
Soluzione 1
EtaInAnni<‐function(A){
B<‐as.POSIXlt(Sys.time())$year+1900
C<‐B‐A
return(C)
}
Scrivere una funzione per calcolare il peso
ideale, secondo una delle seguenti formule:
Formula di Lorenz
Peso ideale Uomini = altezza in cm – 100 ‐ (altezza in cm – 150)/4
Peso ideale Donne = altezza in cm – 100 ‐ (altezza in cm – 150)/2
Formula di Broca
Peso ideale Maschi = altezza in cm – 100
Peso ideale Femmine = altezza in cm – 104
Formula di Wan der Vael
Peso ideale Uomini = (altezza in cm ‐ 150) x 0.75 + 50
Peso ideale Donne = (altezza in cm ‐ 150) x 0.6 + 50
Formula di Berthean
Peso ideale = 0.8 x (altezza in cm – 100) + età/2
Formula di Perrault
Peso ideale = Altezza in cm – 100 + età/10 x 0.9
Formula di Keys
Peso ideale Uomini = (altezza in m)² x 22.1
Peso ideale Donne = (altezza in m)² x 20.6
Formula di Travia
Peso ideale = (1,012 x altezza in cm) – 107.5