1. LINGUAGGIO RLINGUAGGIO R
PRINCIPI E CONCETTIPRINCIPI E CONCETTI
Vincenzo De Maio
Matricola 0510200251
Corso di Calcolo delle probabilità e statistica matematica
Prof. Aniello Fedullo
2. Cos'è R?Cos'è R?
● R è un ambiente e un linguaggio di
programmazione volto alla risoluzione di
problemi di statistica. E' totalmente open-source e
distribuito sotto licenza GNU/GPL 2.0 .
● Deriva dal linguaggio S, un progetto GNU molto
simile, e possiamo vederlo come una differente
implementazione di S
● Sito del progetto R: www.r-project.org
3. ARGOMENTI DELLA LEZIONEARGOMENTI DELLA LEZIONE
● Elementi basilari di R
● Gli Oggetti di R
● Strutture di controllo
● Costrutti iterativi
● Creazione di proprie funzioni
4. Elementi basilari di R: sintassiElementi basilari di R: sintassi
● R è case-sensitive (A != a)
● I comandi sono separati da ';' o dal carattere di
newline
● Se alla fine della linea un comando inserito è
incompleto, viene dimostrato il simbolo '+' che
indica di aggiungere ciò che manca.
5. Elementi basilari di R:Elementi basilari di R:
commenticommenti
● In R, tutto ciò che segue il carattere '#', viene
considerato un commento e ignorato
● NON È CONSENTITO IL COMMENTO SU
PIÙ RIGHE
6. Elementi basilari di R: help()Elementi basilari di R: help()
● Utilizzo: help(“nomefunzione”) o
help(“operatore”)
(oppure ?nomefunzione o ?operatore)
● E' possibile effettuare una ricerca nell'help tramite
help.search(“pattern”), dove pattern è ciò che
intendiamo cercare.
● Per una delucidazione generale riguardo R,
digitare help.start().
7. Elementi basilari di R:Elementi basilari di R:
manipolazione degli oggettimanipolazione degli oggetti
● Con il comando objects() ( o ls() ) è possibile
visualizzare i nomi degli oggetti che esistono
nell'ambiente R
● Per la rimozione di un oggetto, basta utilizzare
rm(nomeoggetto)
● Per la rimozione di tutti gli oggetti, rm( list = ls()
)
8. CoercizioneCoercizione
● Sugli oggetti di R viene effettuata solitamente la
COERCIZIONE, ovvero i valori vengono
“costretti” ad assumere il tipo richiesto dalla
computazione.
● E' possibile effettuare una coercizione esplicita
tramite opportune funzioni (es.
as.character(oggetto) , as.name(oggetto) etc)
9. Utilizzo di librerieUtilizzo di librerie
● R mette a disposizione degli utenti un vasto
numero di librerie; per poterle utilizzare, bisogna
digitare il comando library(nomelibreria)
● Talvolta, per evitare di dover ridigitare tale
comando, può essere utile aggiungere delle
istruzioni library() all'interno del file Rprofile...
10. Rprofile, questo sconosciuto...Rprofile, questo sconosciuto...
● Rprofile è uno dei primi file che R legge
appena inizia la sua esecuzione (come
.bashrc nella bash shell)
● E' posizionato nel percorso
HOME/library/base, dove HOME è la
cartella in cui R è installato.
● IDEA! se ci sono dei comandi che
utilizziamo ad ogni avvio di R, forse
possiamo inserirli nel file Rprofile per
evitarne il re-inserimento...
11. Elementi basilari di R: q()Elementi basilari di R: q()
● la chiamata di q() causa l'uscita dall'ambiente R
● All'uscita, R chiederà all'utente se intende salvare
l'immagine del workspace, ovvero se gli oggetti
che abbiamo or ora utilizzato dovranno essere
disponibili alla successiva esecuzione di R.
12. ARGOMENTI DELLA LEZIONEARGOMENTI DELLA LEZIONE
● Elementi basilari di R
● Gli Oggetti di R
● Strutture di controllo
● Programmazione orientata agli oggetti in R
● R e la statistica
13. Oggetti?Oggetti?
● R è un linguaggio orientato agli oggetti.
● Ogni oggetto di R possiede un certo numero di
attributi, eredita una o più classi...
● Per accedere a un qualsiasi attributo, la sintassi è
nomeattributo(oggetto).
14. Gli oggetti di RGli oggetti di R
● Vettori e aritmetica
● Array e matrici
● Liste
● Fattori
● Data frames
● Altri tipi di R
15. VettoriVettori
● Alla base della computazione di R c'è l'oggetto
Vettore.
● R mette a disposizione dell'utente 6 tipi atomici di
vettori: logical, integer, double, complex,
character, raw.
16. Inizializzazione di vettoriInizializzazione di vettori
● x <- c( elem1, elem2, elem3, elem4 );
● Questa istruzione assegna a x un vettore contenente gli
elementi elem1 elem2 elem3 elem4 (c è una funzione che
restituisce in output il vettore degli elementi passati in
input)
● assign(“x”, c(elem1,elem2,elem3,elem4));
● Questa istruzione assegna a x un vettore contenente gli
elementi elem1 elem2 elem3 elem4
17. I vettori e l'aritmeticaI vettori e l'aritmetica
● I vettori possono essere utilizzati in operazioni
aritmetiche, effettuando le operazioni elemento
per elemento.
● E' possibile operare con vettori di lunghezza
diversa
● Per accedere all'i-esimo elemento di un vettore, si
utilizza l'espressione x[i] (dove i può essere anche
un vettore)
18. Esempio 1.2 (1)Esempio 1.2 (1)
> #vediamo il contenuto di x
[1] 2 3 5 7
>#vediamo il contenuto di y
[1] 4 2
> z <- 2*x+1 #assegniamo al vettore z il risultato
di questa operazione
> z # ora vediamo il contenuto di z
[1] 9 9 15 17
19. Esempio 1.2 (2)Esempio 1.2 (2)
● Infatti...
● 2 * x = 4 6 10 14 (2*2, 2*3, 2*10, 2*7)
● 2*x + y = 8 8 14 16 (4 + 4, 6 + 2, 10 + 4, 14 + 2) (N.B. il
vettore y è stato considerato 2 volte, per raggiungere la
dimensione del vettore x di lunghezza maggiore)
● 2*x + y + 1 = 9 9 15 17 (8 + 1, 8 + 1, 14+1, 16+1)
Se le dimensioni dei vettori non sono multipli l'uno dell'altro,
si prendono i primi n elementi del vettore più piccolo, dove n =
dimensione di A – dimensione di B (con dimensione di B <
dimensione di A); l'operazione viene eseguita ma viene
stampato un warning.
20. Operatori e funzioniOperatori e funzioni
aritmetichearitmetiche
● ... e una notevole varietà di funzioni simpatiche
● log(), exp(), sin(), cos(), tan(), sqrt(), min(), max() (vecchie
conoscenze di analisi matematica)
● R ha a disposizione alcuni operatori elementari...
● +, -, *, /, ^ (rispettivamente addizione, sottrazione,
moltiplicazione, divisione e elevamento a potenza)
21. Altre funzioni di uso comuneAltre funzioni di uso comune
(1)(1)
● range(vettore) - restituisce un vettore contenente
il minimo e il massimo elemento del vettore
● pmax(x,y), pmin(x,y) – restituiscono un vettore
contenente all'indice i il massimo (o il minimo)
dell'i-esimo elemento dei vettori passati come
parametro
● length(x) - restituisce la lunghezza del vettore x
● mean(x) – media aritmetica degli elementi di x
● var(x) – varianza campionaria degli elementi di x
(se x è una matrice, viene restituita la matrice di
varianza e covarianza)
22. Altre funzioni di uso comuneAltre funzioni di uso comune
(2)(2)
● which.funzione(x) – restituisce gli indici
dell'array per cui funzione(x) è true
23. R e i numeri complessiR e i numeri complessi
● In R è possibile effettuare operazioni con i
numeri complessi, ma la parte immaginaria deve
essere esplicitata.
● infatti, sqrt(-17) da errore, mentre sqrt(-17 + 0i) viene
correttamente valutato e darà come risultato un valore
complesso.
24. Generazione di sequenzeGenerazione di sequenze
● Operatore ':' - con questo operatore possiamo
generare un vettore contenente i valori compresi
tra il valore di destra e quello di sinistra
● esempio – 1:10 restituisce il vettore degli elementi
compresi tra 1 e 10.
● Funzione seq() - seq è il modo più “potente” di
generare sequenze in R
25. Funzione seq()Funzione seq()
● seq prende 5 parametri, di cui gli ultimi 3
opzionali: per comodità li chiameremo from, to,
by, length e along
● from: il valore numerico da cui la sequenza deve iniziare
● to: il massimo valore numerico della sequenza
● by: il passo che separa ciascun elemento
● length: la lunghezza della sequenza
● along (se specificato, deve essere l'unico parametro):
genera la successione degli elementi che vanno da 1 a
length(along).
26. Esempio 1.3Esempio 1.3
● Utilizzo di seq con vari argomenti
> seq(1,7) #genera il vettore di elementi da 1 a 7
[1] 1 2 3 4 5 6 7
> seq(1,7,0.5) #genera il vettore di elementi da 1 a 7
usando come passo 0.5
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0
>x <- 5 10 2 1 #riempiamo il vettore x a caso...
> seq(x) #genera il vettore di elementi da 1 a 4,
essendo x un vettore di 4 elementi.
27. Gli oggetti di RGli oggetti di R
● Vettori e aritmetica
● Array e matrici
● Liste
● Fattori
● Data frames
● Altri tipi di R
28. Array e matriciArray e matrici
● Mentre in C array e vettori sono la stessa cosa, in
R un array è un vettore che associa più indici allo
stesso elemento
● Una matrice è un particolare array con 2 indici
(ma potremmo avere anche array con n indici)
● per l'accesso agli elementi di array e matrici si
utilizza la stessa espressione utilizzata per i
vettori
29. Inizializzazione di array eInizializzazione di array e
matricimatrici
● Possiamo ottenere un array (o una matrice) in 2
modi
● modificando l'attributo dim di un vettore preesistente
● utilizzando la funzione array() (per le matrici esiste
l'apposita funzione matrix() )
30. Modifica dell'attributo dimModifica dell'attributo dim
● IMPORTANTE! il prodotto degli elementi del
vettore assegnato deve essere pari alla lunghezza
del vettore
● La modifica di questo attributo del vettore si
effettua con la chiamata dim(vettore)
● La sintassi è la seguente
● dim(vettore) <- c(3,2)
32. Utilizzo di array() e matrix()Utilizzo di array() e matrix()
● array(vettore dati, vettore dimensioni)
● matrix(vettore dati, numero_righe,
numero_colonne)
33. Operazioni tra arrayOperazioni tra array
● È possibile effettuare operazioni tra array
esattamente come per i vettori, tenendo conto
delle seguenti regole in caso di array di
dimensioni differenti
● Le espressioni sono valutate da sinistra a destra
● i vettori corti sono estesi ripetendo i loro valori finchè non
si ha corrispondenza dimensionale tra gli operandi
coinvolti
● qualsiasi operando vettore più lungo di matrice o array
genera un errore
● gli array devono avere lo stesso valore di dim o si ha un
errore
● Se non c'è errore, l'array risultante ha lo stesso dim degli
array coinvolti nella computazione (se sono presenti array)
34. Operatori speciali per matriciOperatori speciali per matrici
● Siano A, B 2 matrici nxn
● A*B esegue il prodotto elemento per elemento (A[1,1] *
B[1,1], ... , A[n,n] * B[n,n].
● A%*%B esegue il prodotto riga per colonna di AxB, se A e
B sono compatibili (ovvero, numero di righe di A = numero
di colonne di B e viceversa)
35. Alcune funzioni per le matriciAlcune funzioni per le matrici
(1)(1)
● t(matrice) – restituisce la trasposta della matrice
● nrow(matrice),ncol(matrice) – restituiscono
rispettivamente il numero di righe e di colonne
della matrice
● crossprod(a,b) – Questa chiamata è equivalente a
t(a) %*% b. Se il secondo argomento viene
omesso, la chiamata è uguale a t(a) %*% a.
36. Alcune funzioni per le matriciAlcune funzioni per le matrici
(2)(2)
● det(matrice) – restituisce il determinante della
matrice
● solve(matrice) – restituisce l'inversa della matrice
se questa è non singolare
● diag(x)
● se x è un vettore, restituisce una matrice con x come
diagonale
● se x è una matrice, restituisce il vettore contenente la
diagonale di x
● se x è un intero, viene restituita la matrice di identità con x
righe e x colonne.
37. Alcune funzioni per le matriciAlcune funzioni per le matrici
(3)(3)
● eigen(matrice) – restituisce una LISTA (ne
parleremo in seguito) contenente gli autovalori e
gli autovettori della matrice
38. Gli oggetti di RGli oggetti di R
● Vettori e aritmetica
● Array e matrici
● Liste
● Fattori
● Data frames
● Altri tipi di R
39. ListeListe
● In R una lista può essere vista come un “vettore
generico”, ovvero come un vettore che può
contenere al suo interno vettori di diverso tipo e
lunghezza.
● La definizione di una lista avviene attraverso il
comando list().
● Gli elementi di una lista hanno sia un indice che
una chiave.
40. Esempio 1.5Esempio 1.5
● Creazione di una lista con chiavi (per averne una
senza chiavi, basta omettere il nome di chiave)
41. Accesso a una listaAccesso a una lista
● x[[i]] – accede all'i-esimo elemento della lista
● x$chiave – accede all'elemento con chiave
'chiave'.
● al posto della chiave, è possibile utilizzare
un'abbreviazione, purchè sia univoca.
● Se la lista contiene un vettore, è possibile
accederci come un normale vettore
43. Gli oggetti di RGli oggetti di R
● Vettori e aritmetica
● Array e matrici
● Liste
● Fattori
● Data frames
● Altri tipi di R
44. FattoriFattori
● Un fattore è un oggetto vettore che fornisce una
classificazione discreta delle componenti di altri
vettori della stessa lunghezza.Possono essere
ordinati o non ordinati.
● Un fattore ordinato può essere visto come una
variabile qualitativa ordinabile
● Un fattore non ordinato può essere visto come
una variabile qualitativa sconnessa
● L'attributo levels indica i livelli di fattorizzazione
● Non si capisce niente, meglio fare un esempio...
45. Esempio 1.7 (1)Esempio 1.7 (1)
● Supponiamo di avere un'azienda con 5 impiegati
che risiedono in province diverse; creiamo un
vettore con le province di residenza
province <- c(“CE”,”NA”,”AV”,”CE”,”NA”)
Ora creiamone il fattore...
47. Esempio 1.7 (3)Esempio 1.7 (3)
● Ora supponiamo di voler calcolare il reddito
medio annuale per provincia; creiamo un altro
vettore contenente il reddito annuale per ogni
impiegato, ponendo nell'i-esimo elemento del
vettore redditi il reddito dell'i-esimo impiegato
del vettore provincia
48. Esempio 1.7 (4)Esempio 1.7 (4)
● È possibile a questo punto effettuare una
chiamata di funzione in base al fattore, tramite
tapply(); Nel caso specifico, la funzione che ci
interessa è mean(), per la media aritmetica degli
stipendi
● Prototipo: tapply(vettore, fattore, funzione)
50. In sintesi...In sintesi...
● Abbiamo effettuato il calcolo della media per
provincia senza utilizzare alcun costrutto iterativo
e senza ricorrere a strutture particolarmente
complesse!
51. Gli oggetti di RGli oggetti di R
● Vettori e aritmetica
● Array e matrici
● Liste
● Fattori
● Data frames
● Altri tipi di R
52. Data FramesData Frames
● Un Data frame è una lista di classe data frame,
ovvero una lista su cui sono poste delle
restrizioni. Viene rappresentato come una matrice
i cui elementi possono essere di vario tipo, ma di
uguale lunghezza.
53. Vincoli sui data frame (1)Vincoli sui data frame (1)
● Un data frame può contenere SOLO
● Vettori (logici, di caratteri o numerici)
● Matrici numeriche
● Fattori
● Liste
● altri data frame
● Le variabili possedute da matrici e liste diventano
parte del data frame.
● I vettori di caratteri sono “costretti” a fattori, i cui
livelli sono i caratteri del vettore presi una sola
volta.
54. Creazione di un data frameCreazione di un data frame
● dataframe = data.frame(elemento1=par1,
elemento2=par2)
● Se una lista rispetta le restrizioni di un data frame, può
essere costretta a essere un data frame dichiarandone
esplicitamente la coercizione tramite la funzione
as.data.frame(lista)
55. Altri Tipi di RAltri Tipi di R
●NULL
●char
●logical
●integer
●double
●complex
●character
●...
●any
●expression
●list
●closure
●promise
●language
●weakref
●raw
56. Gli oggetti di RGli oggetti di R
● Vettori e aritmetica
● Array e matrici
● Liste
● Fattori
● Data frames
● Altri tipi di R
57. ARGOMENTI DELLA LEZIONEARGOMENTI DELLA LEZIONE
● Elementi basilari di R
● Gli Oggetti di R
● Strutture di controllo
● Costrutti iterativi
● Creazione di nuove funzioni
58. Strutture di controllo:if-elseStrutture di controllo:if-else
● Come tutti i linguaggi di programmazione, R
mette a disposizione delle strutture di controllo
● If-else è una nostra vecchia conoscenza...
● sintassi:
● if(condizione)
● Istruzione1
● Else
● istruzione2
60. Un ripasso su if-elseUn ripasso su if-else
● E' possibile porre in cascata gli if-else, come in
tutti i linguaggi di programmazione
if(condizione_1)
Istruzione_1
Else if(condizione_2)
istruzione_2
....
else if(condizione_n-1)
istruzione_n-1
else
istruzione_n
61. ARGOMENTI DELLA LEZIONEARGOMENTI DELLA LEZIONE
● Elementi basilari di R
● Gli Oggetti di R
● Strutture di controllo
● Costrutti iterativi
● Creazione di nuove funzioni
62. Ciclo REPEATCiclo REPEAT
● L'istruzione repeat viene utilizzata per ripetere la
valutazione del blocco di istuzioni che segue
finchè non viene esplicitamente bloccata
● Se ne sconsiglia solitamente l'uso, in quanto c'è il
pericolo che si verifichi un loop infinito
● Sintassi:
repeat { istruzione_1 ... istruzione_n }
64. Ciclo WHILECiclo WHILE
● Il ciclo while può essere visto come un repeat in
cui “forziamo” il controllo della condizione di
uscita...
● Sintassi:
while(condizione){
istruzione_1;
...
istruzione_n;
}
il ciclo continua l'esecuzione finchè condizione è vera.
66. Ciclo FORCiclo FOR
● Il ciclo FOR è lievemente diverso da quello che
conosciamo...
● Invece di incrementare un contatore, “scorre” un
vettore o una lista. (per chi conosce PHP, è simile
a foreach).
● Sintassi:
for (elem in vector){
istruzione_1;
...
istruzione_n;
}
67. Oddio, cos'è? Non capiscoOddio, cos'è? Non capisco
niente!niente!
● Calma...
● All'i-esima iterazione, alla variabile elem viene
assegnato l'i-esimo elemento del vettore (o lista)
vector.
● L'esecuzione del ciclo termina quando abbiamo
analizzato tutti gli elementi del vettore.
68. Hmm, forse ci siamo...Hmm, forse ci siamo...
● Il ciclo for di cui disponiamo in R può quindi
essere utilizzato sia normalmente...
● Ad esempio, se vogliamo effettuare 10 iterazioni,
semplicemente facciamo in modo che vector sia un vettore
(o lista) di 10 elementi...
● Sia per facilitare lo scorrimento di vettori o liste
● Dato che a elem viene sempre assegnato l'i-esimo
elemento del vettore o lista, basta effettuare su di lui le
operazioni che ci servono
WOW! FACCIAMO UN ESEMPIO??
71. Istruzione BREAKIstruzione BREAK
● L'istruzione break in R ha lo stesso ruolo che ha
nel linguaggio C...
● Causa l'interruzione immediata del ciclo in cui viene
eseguita
● L'esecuzione del programma riprende dalla fine di quel
ciclo
72. Istruzione NEXTIstruzione NEXT
● L'istruzione next ha la stessa funzione del
continue in C
● Termina l'esecuzione della corrente iterazione, riportando il
controllo all'inizio del ciclo in cui viene utilizzata.
● L'esecuzione del programma riprende dalla prossima
iterazione del ciclo.
73. ARGOMENTI DELLA LEZIONEARGOMENTI DELLA LEZIONE
● Elementi basilari di R
● Gli Oggetti di R
● Strutture di controllo
● Costrutti iterativi
● Creazione di nuove funzioni
74. Creazione di nuove funzioniCreazione di nuove funzioni
● Possiamo ovviamente definire nuove funzioni
oltre a quelle preesistenti
● Come? utilizzando la direttiva function.
75. function()function()
● La funzione function() crea un oggetto funzione;
il suo utilizzo è molto semplice
● Sintassi
nomefunzione <- function(parametro_1,...,parametro_n){
istruzione_1;
...
istruzione_n;
}
● Per richiamare la funzione appena creata...
● nomefunzione(parametri)
76. BibliografiaBibliografia
● Per la realizzazione di queste slides sono stati
usati solo i documenti ufficiali di R, reperibili al
sito www.r-project.org (sezione documentation).