LINGUAGGIO RLINGUAGGIO R
PRINCIPI E CONCETTIPRINCIPI E CONCETTI
Vincenzo De Maio
Matricola 0510200251
Corso di Calcolo delle probabilità e statistica matematica
Prof. Aniello Fedullo
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
ARGOMENTI DELLA LEZIONEARGOMENTI DELLA LEZIONE
● Elementi basilari di R
● Gli Oggetti di R
● Strutture di controllo
● Costrutti iterativi
● Creazione di proprie funzioni
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.
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
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().
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()
)
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)
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...
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...
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.
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
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).
Gli oggetti di RGli oggetti di R
● Vettori e aritmetica
● Array e matrici
● Liste
● Fattori
● Data frames
● Altri tipi di R
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.
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
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)
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
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.
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)
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)
Altre funzioni di uso comuneAltre funzioni di uso comune
(2)(2)
● which.funzione(x) – restituisce gli indici
dell'array per cui funzione(x) è true
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.
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
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).
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.
Gli oggetti di RGli oggetti di R
● Vettori e aritmetica
● Array e matrici
● Liste
● Fattori
● Data frames
● Altri tipi di R
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
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() )
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)
Esempio 1.4Esempio 1.4
● Esempio di inizializzazione di array tramite
modifica di dim(vettore)
Utilizzo di array() e matrix()Utilizzo di array() e matrix()
● array(vettore dati, vettore dimensioni)
● matrix(vettore dati, numero_righe,
numero_colonne)
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)
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)
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.
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.
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
Gli oggetti di RGli oggetti di R
● Vettori e aritmetica
● Array e matrici
● Liste
● Fattori
● Data frames
● Altri tipi di R
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.
Esempio 1.5Esempio 1.5
● Creazione di una lista con chiavi (per averne una
senza chiavi, basta omettere il nome di chiave)
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
Esempio 1.6Esempio 1.6
● Vari metodi di accesso a liste
Gli oggetti di RGli oggetti di R
● Vettori e aritmetica
● Array e matrici
● Liste
● Fattori
● Data frames
● Altri tipi di R
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...
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...
Esempio 1.7 (2)Esempio 1.7 (2)
● Creazione del fattore
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
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)
Esempio 1.7 (5)Esempio 1.7 (5)
● Vediamo ora la media dei redditi per provincia
In sintesi...In sintesi...
● Abbiamo effettuato il calcolo della media per
provincia senza utilizzare alcun costrutto iterativo
e senza ricorrere a strutture particolarmente
complesse!
Gli oggetti di RGli oggetti di R
● Vettori e aritmetica
● Array e matrici
● Liste
● Fattori
● Data frames
● Altri tipi di R
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.
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.
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)
Altri Tipi di RAltri Tipi di R
●NULL
●char
●logical
●integer
●double
●complex
●character
●...
●any
●expression
●list
●closure
●promise
●language
●weakref
●raw
Gli oggetti di RGli oggetti di R
● Vettori e aritmetica
● Array e matrici
● Liste
● Fattori
● Data frames
● Altri tipi di R
ARGOMENTI DELLA LEZIONEARGOMENTI DELLA LEZIONE
● Elementi basilari di R
● Gli Oggetti di R
● Strutture di controllo
● Costrutti iterativi
● Creazione di nuove funzioni
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
Esempio 2.1Esempio 2.1
● Utilizzo di if-else
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
ARGOMENTI DELLA LEZIONEARGOMENTI DELLA LEZIONE
● Elementi basilari di R
● Gli Oggetti di R
● Strutture di controllo
● Costrutti iterativi
● Creazione di nuove funzioni
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 }
Esempio 3.1Esempio 3.1
● Utilizzo di repeat
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.
Esempio 3.2Esempio 3.2
● Utilizzo del ciclo while
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;
}
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.
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??
Esempio 3.3Esempio 3.3
● Utilizzo “semplice” del ciclo for
Esempio 3.4Esempio 3.4
● Utilizzo “nuovo” del ciclo for
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
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.
ARGOMENTI DELLA LEZIONEARGOMENTI DELLA LEZIONE
● Elementi basilari di R
● Gli Oggetti di R
● Strutture di controllo
● Costrutti iterativi
● Creazione di nuove funzioni
Creazione di nuove funzioniCreazione di nuove funzioni
● Possiamo ovviamente definire nuove funzioni
oltre a quelle preesistenti
● Come? utilizzando la direttiva function.
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)
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).
E adesso...E adesso...
STUDIATE!!!

Linguaggio R, principi e concetti

  • 1.
    LINGUAGGIO RLINGUAGGIO R PRINCIPIE 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 LEZIONEARGOMENTIDELLA LEZIONE ● Elementi basilari di R ● Gli Oggetti di R ● Strutture di controllo ● Costrutti iterativi ● Creazione di proprie funzioni
  • 4.
    Elementi basilari diR: 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 diR: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 diR: 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 diR: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 oggettidi 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 librerieUtilizzodi 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 diR: 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 LEZIONEARGOMENTIDELLA 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 diRGli oggetti di R ● Vettori e aritmetica ● Array e matrici ● Liste ● Fattori ● Data frames ● Altri tipi di R
  • 15.
    VettoriVettori ● Alla basedella 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 vettoriInizializzazionedi 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 el'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)Esempio1.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)Esempio1.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 funzioniOperatorie 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 diuso 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 diuso comuneAltre funzioni di uso comune (2)(2) ● which.funzione(x) – restituisce gli indici dell'array per cui funzione(x) è true
  • 23.
    R e inumeri 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 sequenzeGenerazionedi 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 diRGli oggetti di R ● Vettori e aritmetica ● Array e matrici ● Liste ● Fattori ● Data frames ● Altri tipi di R
  • 28.
    Array e matriciArraye 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 arrayeInizializzazione 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 dimModificadell'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)
  • 31.
    Esempio 1.4Esempio 1.4 ●Esempio di inizializzazione di array tramite modifica di dim(vettore)
  • 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 arrayOperazionitra 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 permatriciOperatori 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 perle 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 perle 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 perle 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 diRGli oggetti di R ● Vettori e aritmetica ● Array e matrici ● Liste ● Fattori ● Data frames ● Altri tipi di R
  • 39.
    ListeListe ● In Runa 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 unalistaAccesso 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
  • 42.
    Esempio 1.6Esempio 1.6 ●Vari metodi di accesso a liste
  • 43.
    Gli oggetti diRGli 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)Esempio1.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...
  • 46.
    Esempio 1.7 (2)Esempio1.7 (2) ● Creazione del fattore
  • 47.
    Esempio 1.7 (3)Esempio1.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)Esempio1.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)
  • 49.
    Esempio 1.7 (5)Esempio1.7 (5) ● Vediamo ora la media dei redditi per provincia
  • 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 diRGli 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 dataframe (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 undata 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 diRAltri Tipi di R ●NULL ●char ●logical ●integer ●double ●complex ●character ●... ●any ●expression ●list ●closure ●promise ●language ●weakref ●raw
  • 56.
    Gli oggetti diRGli oggetti di R ● Vettori e aritmetica ● Array e matrici ● Liste ● Fattori ● Data frames ● Altri tipi di R
  • 57.
    ARGOMENTI DELLA LEZIONEARGOMENTIDELLA LEZIONE ● Elementi basilari di R ● Gli Oggetti di R ● Strutture di controllo ● Costrutti iterativi ● Creazione di nuove funzioni
  • 58.
    Strutture di controllo:if-elseStrutturedi 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
  • 59.
    Esempio 2.1Esempio 2.1 ●Utilizzo di if-else
  • 60.
    Un ripasso suif-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 LEZIONEARGOMENTIDELLA 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 }
  • 63.
    Esempio 3.1Esempio 3.1 ●Utilizzo di repeat
  • 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.
  • 65.
    Esempio 3.2Esempio 3.2 ●Utilizzo del ciclo while
  • 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'è? NoncapiscoOddio, 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 cisiamo...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??
  • 69.
    Esempio 3.3Esempio 3.3 ●Utilizzo “semplice” del ciclo for
  • 70.
    Esempio 3.4Esempio 3.4 ●Utilizzo “nuovo” del ciclo for
  • 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 LEZIONEARGOMENTIDELLA LEZIONE ● Elementi basilari di R ● Gli Oggetti di R ● Strutture di controllo ● Costrutti iterativi ● Creazione di nuove funzioni
  • 74.
    Creazione di nuovefunzioniCreazione di nuove funzioni ● Possiamo ovviamente definire nuove funzioni oltre a quelle preesistenti ● Come? utilizzando la direttiva function.
  • 75.
    function()function() ● La funzionefunction() 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 larealizzazione di queste slides sono stati usati solo i documenti ufficiali di R, reperibili al sito www.r-project.org (sezione documentation).
  • 77.