Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici III.5 Come analizzare i dati Elisabetta Ronchieri Università di Ferrara Dipartimento di Economia e Management Insegnamento di Informatica Novembre 13, 2015 Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Argomenti 1 Introduzione e concetti generali 2 Strutture dati 3 Nozioni base di programmazione 4 Grafici Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Cosa è R? R è una suite integrata di strumenti software per la manipolazione dei dati, il calcolo e la visualizzazione grafica. R presenta: una gestione efficace dei dati; un insieme di operatori per i calcoli su array, in particolare matrici; una grande raccolta di strumenti intermedi per l’analisi dei dati; servizi grafici per l’analisi e visualizzazione dei dati; un linguaggio di programmazione semplice. La maggior parte dei programmi scritti in R sono scritti allo scopo di analizzare dati. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Cosa è R? R è un software GNU (gratuito sotto licenza GPL). È disponibile on line: http://www.r-project.org La principale repository di pacchetti è: CRAN con circa 4500 pacchetti: http://cran.r-project.org/ Ogni funzione e pacchetto è ampiamente documentato con tutte le informazioni ed esempi che ne facilitano l’utilizzo e l’apprendimento. Tutto ciò che serve per apprendere R è disponibile online gratuitamente (anche in italiano): http://cran.r-project.org/manuals.html Un IDE (Integrated Development Environment) per R: http://www.rstudio.com/ Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici I tipi di dati R è un linguaggio orientato alla programmazione a oggetti. Ogni variabile in R è detta oggetto. Ogni oggetto ha una classe di appartenenza che ne definisce le proprietà. tipo di dati contenuti nel vettore. I tipi di dati in R sono in tutto 8: logical; numeric tra cui integer, double o real, e complex; character; raw; function. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici I tipi di dati Esistono 5 strutture dati che corrispondono a 5 classi di dati: 1 2 3 4 5 vettori (classe vector); matrici (classe matrix); array (classe array); liste (classe list); data.frame (classe data.frame). Esempi di funzioni per determinare la classe di un oggetto: class() is.list(), is.function(), is.logical() Queste funzioni restituisco TRUE o FALSE in base all’appartenenza o meno dell’argomento a quella determinata classe. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Eseguire le istruzioni Le varie istruzioni possono essere eseguite dalla linea di comando della console caratterizzata dal prompt >. Alla pressione del tasto INVIO il comando è eseguito. Le istruzioni possono anche essere raggruppate in script, ossia file di testo contenenti una lista di comandi, la cui estensione è .R. Per caricare uno script si usa la funzione source(): > source(’esempio.R’) Si possono eseguire più operazioni in una stessa riga separandole tramite un ;. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Eseguire le istruzioni I pacchetti non inclusi nella distribuzione base possono essere installati dal prompt di R tramite la funzione install.packages() > install.packages(’Quandl’) Eventuali pacchetti installati nel sistema possono essere caricati tramite la funzione library() o (indifferentemente) require(). > library(’Quandl’) I pacchetti disponibili sono da ricercare http: //cran.r-project.org/src/contrib/PACKAGES Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Operatori principali Per assegnare valori ad un oggetto si può utilizzare l’operatore di assegnazione ← (preferito) o = > x <- 10 > x [1] 10 In R non è necessario dichiarare le variabili. Se al primo utilizzo una variabile non è presente nel contesto corrente o in qualsiasi contesto che include quello corrente è restituito un errore. R è case-sensitive. > x <- 10 > X Error: object ’X’ not found Nel momento in cui viene creato un oggetto che ha lo stesso nome di un altro nel contesto corrente, quest’ultimo sarà sovrascritto. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Caratteri speciali Il nome delle variabili non deve avere caratteri speciali (es. !, %). Il punto è considerato un carattere normale. Si possono creare variabili che contengono il punto: es. number.of.elements. Il carattere # è il simbolo del commento. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Parole riservate FALSE, TRUE Inf, NaN, NA, NULL if, else, for, while, repeat, break, function, in, next ... Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Valori speciali Se un oggetto possiede un valore ignoto sarà indicato con NA. Il risultato di una forma indeterminata (0/0 o Inf/0) avrà come risultato NaN. La funzione is.nan() restituisce TRUE solo se il suo argomento è NaN. La funzione is.na() restituisce TRUE se il suo argomento è NA o NaN. Molte funzioni, tramite il parametro opzionale na.rm, consentono di escludere dalla computazione tutti i valori NA o NaN. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Operatori principali Operatori aritmetici + (somma); - (sottrazione); * (moltiplicazione); / (divisione); ∧ (potenza); %/% (divisione intera tra due numeri); %% (resto della divisione intera tra due numeri). Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Operatori principali Operatori logici & (AND logico) | (OR logico) ! (NOT logico) Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Operatori principali Operatori relazionali == (uguale) != (diverso) < (minore), > (maggiore), <= (minore uguale), >= (maggiore uguale) L’applicazione degli operatori relazionali ha come risultato TRUE o FALSE. Le espressioni logiche TRUE o FALSE corrispondono rispettivamente a 1 o 0, quindi possono essere utilizzate nelle operazioni aritmetiche. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Funzioni matematiche sum(); prod(); sqrt(); exp(); log(); sin(); cos(); max(); min(); round(); sign(); ceiling(); floor(); mean(); median(); var(); sd(); cov(); Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Workspace Il workspace rappresenta il contenuto della memoria di lavoro. Per visualizzare gli oggetti definiti nel workspace si può usare la funzione ls(). > ls() [1] "dn" [5] "mtcars" [9] "some.plot" [13] "x" "environmental" "pie.sales" "temp.cut" "y" "f" "pp" "vps" "Y" "midpts" "some.data" "wind.cut" "y1" Tramite la funzione rm() è possibile rimuovere un oggetto. > rm(’y1’) > ls() [1] "dn" [5] "mtcars" [9] "some.plot" [13] "x" "environmental" "pie.sales" "temp.cut" "y" Elisabetta Ronchieri "f" "pp" "vps" "Y" III Dati e Informazione "midpts" "some.data" "wind.cut" Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Workspace Per visualizzare la directory del workspace si può usare la funzione getwd(). > getwd() [1] "E:/R-3.0.2/workdir" Per cambiare la directory del workspace si può usare la funzione setwd(). Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Informazioni su funzioni Per qualsiasi informazione su una funzione o sul suo utilizzo è possibile accedere alla documentazione online: http://cran.r-project.org/manuals.html Oppure recuperare analoga informazione eseguendo una delle seguenti operazioni che ridirezione la documentazione su browser di sistema: help(’ls’) ?ls ?ls() Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Introduzione Nell’ambiente R esistono cinque principali strutture dati predefinite: 1 2 3 4 5 vector matrix array list data.frame I dati vector, matrix e array sono di tipo omogeneo, mentre list e data.frame sono di tipo eterogeneo. Le funzioni is.vector(), is.matrix(), is.array(), is.list() e is.data.frame() ritornano TRUE se l’argomento è del tipo specificato altrimenti FALSE. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Vettori Un vettore si può definire come una sequenza ordinata di oggetti dello stesso tipo (es. number, character, logical). Il modo più comune per la costruzione di un vettore prevede l’utilizzo della funzione c(): > x <- c(1,2,3,4,5,7) > x [1] 1 2 3 4 5 7 > x[2] [1] 2 Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Vettori Per estrarre alcuni elmenti dal vettore x: > x[c(1,2,4)] [1] 1 2 4 > x[-c(1,2,4)] [1] 3 5 7 Il segno - indica gli elementi che bisogna escludere durante la selezione. Qualsiasi tipologia di selezione (o qualunque tipo di operazione) che si fa su un oggetto è essa stessa un oggetto. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Vettori Le operazioni sui vettori (cosi come sulle matrici e sugli array) sono eseguite su ogni elemento dell’array: > x[x>0] [1] 1 2 3 4 5 7 > x[x>0] + c(2,1,2,1,2,1) [1] 3 3 5 5 7 8 Le operazioni tra vettori devono essere lecite. Nel caso di somma tra vettori di lunghezza diversa, il risultato viene visualizzato fino al raggiungimento della lunghezza più piccola. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Vettori Funzioni alternative alla costruzione di un vettore. > x <- vector(’numeric’, length=10) > x [1] 0 0 0 0 0 0 0 0 0 0 > rep(c(1,2), times=2) #ripeti 2 volte il vettore (1,2) [1] 1 2 1 2 > seq(3,11,by=2) [1] 3 5 7 9 11 Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Vettori La funzione range() restituisce il range dei valori contenuti in un vettore. La funzione length() restituisce la dimensione dell’oggetto passato come parametro. La funzione which() mostra la posizione degli elementi del vettore che soddisfano una particolare condizione. > x [1] 1 2 3 4 5 7 > which(x>3) [1] 4 5 6 La funzione sort() ordina gli elementi di un vettore. La funzione order() restituisce la seguenza di indici ordinata. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Matrici Una matrice è una tabella ordinata di elementi dello stesso tipo. Le matrici sono considerate un’estensione dei vettori. Ciascun elemento è univocamente localizzato tramite una coppia di numeri interi: l’indice di riga e quello di colonna. La funzione matrix() permette la creazione di una matrice: > y<-matrix(1:10,ncol=5) > y [,1] [,2] [,3] [,4] [,5] [1,] 1 3 5 7 9 [2,] 2 4 6 8 10 Gli elementi sono disposti dall’alto verso il basso e da sinistra verso destra (disposizione per colonne), a meno di non specificare il parametro byrow=TRUE. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Matrici Per mostrare il contenuto della colonna 3: > y[,3] [1] 5 6 Per mostrare l’elemento nella seconda riga e terza colonna: > y[2,3] [1] 6 Per selezionare la prima, quarta e quinta colonna: > y[,-c(2,3)] [,1] [,2] [,3] [1,] 1 7 9 [2,] 2 8 10 Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Matrici Per convertire un oggetto vector in oggetto matrix si può usare la funzione as.matrix(). Per il contrario vi è la funzione as.vector(). Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Matrici Funzioni alternative alla costruzione di una matrice. > rbind(c(3,4),5:6,c(4,7)) [,1] [,2] [1,] 3 4 [2,] 5 6 [3,] 4 7 > cbind(c(3,4),5:6,c(4,7)) [,1] [,2] [,3] [1,] 3 5 4 [2,] 4 6 7 > diag(2:5) [,1] [,2] [,3] [,4] [1,] 2 0 0 0 [2,] 0 3 0 0 [3,] 0 0 4 0 [4,] 0 0 0 5 Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Matrici Modo alternativo alla costruzione di una matrice. > m <- matrix(,nrow=4,ncol=3) # matrice vuota 4x3 > m[] <- 13:24 > m [,1] [,2] [,3] [1,] 13 17 21 [2,] 14 18 22 [3,] 15 19 23 [4,] 16 20 24 Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Matrici La funzione range() restituisce il range dei valori contenuti nella matrice. La funzione length() restituisce il numero di elementi presenti nella matrice. La funzione dim() restituisce la dimensione della matrice. La funzione nrow() restituisce il numero di righe. La funzione ncol() restituisce il numero di colonne. La funzione appy() permette di applicare funzioni matematiche su righe e colonne. > m [1,] [2,] [3,] [4,] [,1] [,2] [,3] 13 17 21 14 18 22 15 19 23 16 20 24 > apply(m,2,max) # 2 indica colonne [1] 16 20 24 > apply(m,1,max) # 1 indica righe [1] 21 22 23 24 Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Matrici La funzione t() calcola la trasposta della matrice. La funzione solve() calcola la inversa della matrice. > m > mm <- diag(2,3) > solve(mm) [,1] [,2] [,3] [1,] 0.5 0.0 0.0 [2,] 0.0 0.5 0.0 [3,] 0.0 0.0 0.5 > mm [,1] [,2] [,3] [1,] 2 0 0 [2,] 0 2 0 [3,] 0 0 2 [,1] [,2] [,3] [1,] 13 17 21 [2,] 14 18 22 [3,] 15 19 23 [4,] 16 20 24 > t(m) [,1] [,2] [,3] [,4] [1,] 13 14 15 16 [2,] 17 18 19 20 [3,] 21 22 23 24 Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Matrici Il prodotto matriciale riga per colonna si effettua attraverso l’operatore %*% Il prodotto elemento per elemento si effettua con l’operatore * L’operatore %in% permette di vedere se un’occorrenza dei valori dell’operando di sinistra si trova nei valori dell’operando di destra. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Array Gli array costituiscono un’estensione delle matrici. Un elemento di un array è rappresentato da un vettore di indici. Per costruire un array è utilizzata la funzione array(): > > > > > # 1 parametro contiene gli elementi # 2 parametro le dimensioni: # 4 numero di righe, 2 numero di colonne, 3 numero di matrici a <- array(24:49,dim=c(4,2,3)) a[,,1] [,1] [,2] [1,] 24 28 [2,] 25 29 [3,] 26 30 [4,] 27 31 > a[2,,] [,1] [,2] [,3] [1,] 25 33 41 [2,] 29 37 45 Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Liste Una lista in R si può definire come una raccolta di oggetti (anche di tipi diversi), comprese altre liste. È un tipo ricorsivo. Per creare una lista si utilizza la funzione list(). > l<- list(c(1,2,3),matrix(2:9,nrow=4),c(’p’,’c’)) > l [[1]] [1] 1 2 3 [[2]] [,1] [,2] [1,] 2 6 [2,] 3 7 [3,] 4 8 [4,] 5 9 [[3]] [1] "p" "c" Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Liste Le componenti della lista vengono individuate attraverso le singole parentesi [ ]. L’oggetto estratto sarà esso stesso una lista. Per rimuovere dall’oggetto la struttura lista usare: la funzione unlist(); o direttamente l’operatore [[ ]]. > l<- list(c(1,2,3),matrix(2:9,nrow=4),c(’p’,’c’)) > length(l) > l[[3]][1] [1] "p" Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Liste È possibile assegnare nomi ad ogni singolo oggetto incluso nella lista durante la sua creazione > l <- list(a=c(1,2,3),...)). Un altro modo per nominare o rinominare una lista è quello di utilizzare la funzione names() La funzione names() restituisce NULL nel momento in cui la lista viene creata senza nomi. Una volta rinominati gli oggetti della lista, si possono estrarre chiamandoli per nome. Esistono due modi per farlo: 1 tramite il simbolo $ > l$a 2 che restituisce un vettore con l’uso delle parentesi quadre > l[’a’] che restituisce una lista Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Indicizzazione Gli elementi in un vettore, matrice, o array possono essere indicizzati sia numericamente che tramite nomi. Per assegnare nomi si possono usare le funzioni names() per i vettori, rownames() e colnames() per le matrici, dimnames() per gli altri oggetti. La funzione unname() rimuove tutti i nomi assegnati ad un oggetto È possibile usare il parametro dimnames dei costruttori matrix e array per assegnare direttamente i nomi. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Indicizzazione > v <- 1:4 > names(v) <- c(’a’,’b’,’c’,’d’) > v a b c d 1 2 3 4 > v[’a’] a 1 > unname(v) [1] 1 2 3 4 Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Indicizzazione > > > > a b c > a 2 > W 1 m <- matrix(1:6, nrow=3, ncol=2, byrow=TRUE) rownames(m) <- c(’a’,’b’,’c’) colnames(m) <- c(’W’,’Z’) m W Z 1 2 3 4 5 6 m[,’Z’] b c 4 6 m[’a’,] Z 2 Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Data frame Il dataframe è simile ad un matrice. È usato per raffigurare dati di diversa entità. Ogni riga corrisponde ad un osservazione, mentre ogni colonna è una variabile. È trattato come un lista. Ogni elemento di tale lista rappresenta una variabile statistica. La funzione length() restiuisce il numero di variabili. La funzione names() restituisce i relativi nomi. Per le osservazioni si utilizza row.names(). Per conoscere la dimensione dell’intero data frame basta utilizzare la funzione dim(). Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Data frame Un data frame può essere creato utilizzando la funzione data.frame(). Nei parametri della funzione data.frame() può essere specificato il nome di ogni singola riga del data frame (row.names) e il nome delle singole osservazioni. Si può assegnare o visualizzare i nomi delle componenti di un data frame: la funzione names() estrae le variabili la funzione row.names() estrae le osservazioni Per cancellare una variabile è sufficiente settarla a NULL. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Data frame > df <- data.frame(Temp=c(-10,30,10), + DeltaT=c(’Freddo’,’Caldo’,’Freddo’)) > df Temp DeltaT 1 -10 Freddo 2 30 Caldo 3 10 Freddo > dim(df) [1] 3 2 > length(df) [1] 2 > df$Mese<-c(’Dicembre’,’Agosto’,’Ottobre’) > df Temp DeltaT Mese 1 -10 Freddo Dicembre 2 30 Caldo Agosto 3 10 Freddo Ottobre Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Data frame > names(df) [1] "Temp" "DeltaT" "Mese" > row.names(df) [1] "1" "2" "3" > row.names(df) <- c(’oss1’, ’oss2’,’oss3’) > df Temp DeltaT Mese oss1 -10 Freddo Dicembre oss2 30 Caldo Agosto oss3 10 Freddo Ottobre Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Data frame Modi per selezionare dal data frame una variabile o una osservazione. > df$DeltaT [1] Freddo Caldo Freddo Levels: Caldo Freddo > df[2,3] [1] "Agosto" > df[2,2] [1] Caldo Levels: Caldo Freddo > df[,2] [1] Freddo Caldo Freddo Levels: Caldo Freddo > df$Mese [1] "Dicembre" "Agosto" Elisabetta Ronchieri "Ottobre" III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Data frame Modi per selezionare dal data frame una variabile o una osservazione. > df[df$DeltaT==’Freddo’,’Mese’] [1] "Dicembre" "Ottobre" > df$DeltaT[df$Temp<=10] [1] Freddo Freddo Levels: Caldo Freddo > df$DeltaT[df$Temp>10] [1] Caldo Levels: Caldo Freddo > df$Mese <- NULL > df Temp DeltaT oss1 -10 Freddo oss2 30 Caldo oss3 10 Freddo Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Introduzione Le istruzioni devono essere scritte secondo l’ordine in cui verranno eseguite Ogni istruzione deve essere separata dalla successiva. Si può fare in due modi: usando il ; andando a capo Attraverso parentesi graffe è possibile isolare blocchi di istruzioni. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici IF-THEN-ELSE La struttura del costrutto if-then-else è if (espressione-logica) istruzione-a o blocco-a else istruzione-b o blocco-b È possibile avere if annidati if (espressione-logica-a) istruzione-a o blocco-a else if (espressione-logica-b) istruzione-b o blocco-b else istruzione-c o blocco-c Esempi di espressione-logica !is.numeric(x) (x == 5) Esempi del costrutto if (!is.numeric(x)) { print(’x non numerico’) } Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Ciclo FOR La struttura del costrutto for è for (nome.variabile in vector) istruzione o blocco Il seguente comando genera un vettore con un numero di elementi compresi tra from e to distanziati da by seq(from=1, to=10, by=2) Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Cicli WHILE e REPEAT La struttura del costrutto while è while (espression-logica) istruzione o blocco La struttura del costrutto repeat è repeat blocco di istruzioni s <- 0 p <- 1 t <- 1 repeat { s <- s + p <- p * t <- t + if (t == } t t 1 10) break() Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Funzioni Le funzioni contengono argomenti in entrata e in uscita. Permettono di utilizzare variabili interne che non interagiscono con le variabili del workspace. Struttura generale di una funzione: nuova.funzione <- function(argomenti) { uscita } Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Funzioni Per definire un argomento opzionale basta indicare dopo il nome il valore predefinito che dovrà assumere se non specificato diversamente. Uno speciale tipo di argomento è ..., che permette di specificare un elenco non definito di argomenti che potrà essere passato ad altre funzioni richiamate nel corpo del metodo. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Funzioni L’ultima espressione valutata all’interno della funzione costituisce anche il suo output. All’interno di una funzione si possono richiamare altre funzioni definite dall’utente purchè siano state definite prima della chiamata. È anche possibile definire funzioni ricorsive. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Funzioni principali per i grafici Le funzioni principali per la rappresentazione grafica sono plot(), points() e lines(). > x<-seq(0,10,0.5) > x [1] 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 [11] 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 [21] 10.0 > plot(x,sin(x),type=’b’,col=2,pch="*",ylab=’f(x)’, + xlab=’tempo’,ylim=c(-1,1)) Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Funzione plot() > plot(x,sin(x),type=’b’,col=2,pch="*",ylab=’f(x)’, + xlab=’tempo’,ylim=c(-1,1)) Esaminiamo alcuni parametri della funzione legend(): Il parametro type specifica la tipologia del grafico: b sta per both, l per lines e p per points (valore di default). Il parametro col specifica il colore: 1 indica il nero (valore di default). Il parametro pch indica il tipo di punto (valore di default o). I parametri ylab e xlab permettono di specificare delle etichette. Il parametro ylim permette di cambiare il range degli assi. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Specificare la legenda La funzione legend() permette di inserire nel grafico una legenda. Questo permette di facilitare la comprensione del grafico. > > + > > > x<-seq(0,10,0.5) plot(x,sin(x),type=’b’,col=2,pch="*",ylab=’f(x)’, xlab=’tempo’,ylim=c(-1,1)) ... legend(0,-0.7, ’sin’,col=2,lty=1,pch=’*’,bty=’n’) legend(0,-0.5, ’cos’,col=4,lty=1,pch=’o’,bty=’n’) Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Funzione legend() > legend(0,-0.5, ’cos’,col=4,lty=1,pch=’o’,bty=’n’) Esaminiamo alcuni parametri della funzione legend(): I primi due parametri specificano le cordinate della legenda sugli assi x e y. Il terzo parametro indica la etichetta. Il parametro col specifica il colore. Il parametro lty specifica il tipo di punto. Il paraetro bty specifica un box attorno alla legenda: n sta per no. Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Creare dot plot È possibile creare Dot Plot con la funzione dotchart() La sintassi del comando è: dotchart(x, labels = NULL, groups = NULL, gcolor = NULL) x è un vettore numerico labels è un vettore di etichette per ogni punto groups è un vettore che specifica come gli elementi di x sono raggruppati gcolor controlla i colori da assegnare ad ogni etichetta Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Funzione dotchart() > class(mtcars) [1] "data.frame" > names(mtcars) [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" [9] "am" "gear" "carb" > str(mtcars) ’data.frame’: 32 obs. of 11 variables: $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... $ cyl : num 6 6 4 6 8 6 8 4 4 6 ... ... $ carb: num 4 4 1 1 2 1 4 2 2 4 ... > x<- mtcars[order(mtcars$mpg),] > x$cyl <- factor(x$cyl) > str(x) ’data.frame’: 32 obs. of 11 variables: $ mpg : num 10.4 10.4 13.3 14.3 14.7 15 15.2 15.2 15.5 15.8 ... $ cyl : Factor w/ 3 levels "4","6","8": 3 3 3 3 3 3 3 3 3 3 ... ... $ gear: num 3 3 3 3 3 5 3 3 3 5 ... $ carb: num 4 4 4 4 4 8 3 2 2 4 ... > x$color[x$carb==4] <- ’red’ > x$color[x$carb==6] <- ’blue’ > x$color[x$carb==8] <- ’green’ > x$color[x$carb==2] <- ’black’ > x$color[x$carb==1] <- ’gray’ > dotchart(x$mpg, labels=row.names(x), cex=.7, groups=x$cyl, + main=’Consumo di Gas per Modelli di Macchina\n raggruppati per cilindrata’, + xlab=’Miglie per galloni’, gcolor=’black’, color=x$color) Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Funzione dotchart() Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Creare grafici a barre È possibile creare grafici a barre con la funzione barplot() La sintassi del comando è: barplot(height, names.arg = NULL, horiz = FALSE, xlab = NULL, ylab = NULL, ...) height è un vettore o matrice che descrive le barre del grafico names.arg è un vettore di nomi da mostrare per ogni barra names.arg è un booleano che indica l’orientamento del grafico xlab, ylab sono le etichette da mostrare sull’asse x o y rispettivamente Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Funzione barplot() > elementi <- table(mtcars$gear) > str(elementi) ’table’ int [1:3(1d)] 15 12 5 - attr(*, "dimnames")=List of 1 ..$ : chr [1:3] "3gears" "4gears" "5gears" > elementi 3gears 4gears 5gears 15 12 5 > barplot(elementi, + main=’Distribuzione delle macchine’, + names.arg=c(’3gears’,’4gears’,’5gears’), + xlab=’numero di gears’) Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Creare grafici a torta È possibile creare grafici a barre con la funzione pie() La sintassi del comando è: pie(slices, labels = NULL, main = NULL, ...) slices è un vettore che descrive le porzioni del grafico labels è un vettore di nomi per ogni porzione del grafico Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici Funzione pie() > > + > pil <- c(10,12,16,20) nazioni <- c(’Italia’, ’Spagna’, ’Francia’,’Germania’) pie(pil, nazioni, main=’Pil di varie nazioni’) Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici References John M. Chambers, Software for data analysis: Programming with R (Statistics and Computing, Springer (2008), http://www.e-reading.me/bookreader. php/137398/Chambers_-_Software_for_Data_ Analysis_-_Programming_with_R.pdf W. N. Venables, D. M. Smith and the R Core Team, An Introduction to R, July 2014, http://cran.r-project. org/doc/manuals/R-intro.pdf Vito M. R. Muggeo, Giancarlo Ferrara, Il Linguaggio R: concetti introduttivi ed esempi, 2005, http://cran. r-project.org/doc/contrib/nozioniR.pdf Elisabetta Ronchieri III Dati e Informazione Introduzione e concetti generali Strutture dati Nozioni base di programmazione Grafici References Josef Eschgfaller, Programmare in R, 2005, http://cran.r-project.org/doc/contrib/ Fondamenti-0405.pdf Brian S. Everitt, Torsten Hothorn, A Handbook of Statistical Analyses Using R, http://cran.r-project.org/web/packages/ HSAUR/vignettes/Ch_introduction_to_R.pdf Claudio Agostinelli, Introduzione a R, https://cran. r-project.org/doc/contrib/manuale.0.3.pdf Elisabetta Ronchieri III Dati e Informazione