• Save
R Vectors
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

R Vectors

  • 3,996 views
Uploaded on

An introduction to R: Vectors

An introduction to R: Vectors

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
3,996
On Slideshare
3,993
From Embeds
3
Number of Embeds
2

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 3

https://www.linkedin.com 2
http://www.slideshare.net 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. I2R R Enviroment & Vettori
  • 2. R statistical package
    • Ci sono molti pacchetti statistici disponibili
      • Alcuni sono facili da usare ma poco flessibili
      • Altri sono estremamente flessibili ma poco user-friendly
      • … poi c’e’ Microsoft Excel™
    • R appartiene alla seconda classe di software statistici:
      • E’ un ambiente integrato basata su un linguaggio di programmazione pensato per descrivere modelli statistici anche molto complessi.
      • Non c’e’ interfaccia “point and click”, R viene utilizzato principalmente tramite linea di comando ( R console )
      • Permette la rappresentzaione grafica di dati (a video, pdf, png …)
      • E’ un linguaggio object-oriented
      • E’ sotto licenza GNU e Open Source
  • 3. R prompt R version 2.6.1 (2007-11-26) Copyright (C) 2007 The R Foundation for Statistical Computing ISBN 3-900051-07-0 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos , 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. >
  • 4. Usare R
    • Tutti i comandi devono essere inseriti dopo il prompt “ > ”:
      • I comandi sono case sensitive
      • Il prompt “+” significa che non abbiamo terminato il comando precedente
    • All’avvio R ci ricorda alcun utili funzioni
      • q() per uscire da R
      • help() pagine di aiuto (on-line help)
      • help.start() pagine di help in un browser html
      • demo() alune dimostrazioni sull’utilizzo di R
  • 5. R On-Line Help > help(mean)
  • 6. R HTML Help System > help.start()
  • 7. R demo > demo(graphics)
  • 8. R: Valutazione di Espressioni
    • Il modo piu’ semplice per utilizzare R:
      • L’Utente inserisce un espressione > 9 + 7
      • Il sistema elabora l’espressione inserita
      • Il sistema stampa a video il risultato [1] 16
    In R tutte le espressioni restituiscono un valore ma il valore puo’ essere NULL o invisibile. Alcune espressioni sono importanti non per il loro risultato, ma per gli “effetti secondari” che generano, per esempio il comando: > help(mean) Non stampa niente a video, ma ha l’interessante effetto secondario di aprire la pagina help di R relativa al comando mean
  • 9. Linguaggio Object-Oriented
    • Oggetti in informatica:
    • Tipicamente una classe e’ definita da:
      • Attributi: dati
      • Metodi: operazioni che e’ possibile compiere sui dati
    • Un oggetto e’ un esemplare di una classe , unico e separato da altri oggetti.
    In R ogni cosa e’ un oggetto ed ogni oggetto appartiene ad una classe MyArray = new Array MyArray Class Array data function: pop function: push In R: S3 and S4 classes
  • 10. Creazione di Oggetti in R
    • Per creare un oggetto in R usiamo l’operatore di assegnamento ( <- ) :
      • x <- 6.7
      • Assegna alla variabile x il numero intero 6.
    • Per sapere cosa contine x basta scrivere:
      • x
      • [1] 6.7
      • R stampa il valore contenuto in x premettendo all’output [1] (vedremo in seguito il significato di questo prefisso)
  • 11. Nomi di Variabili in R
    • Nell’esempio precedente la variabile x e’ il nome dell’oggetto che dovremo utilizzare ogni volta che vogliamo modificare/accedere all’oggetto
    • Un nome puo’ contenere una qualsiasi sequenza di lettere e numeri ma non puo’ cominciare con un numero:
        • x1 <- 7
        • 1x <- 7 ! Error:syntax error !
    • Reserved words : come tutti I linguaggi di programmazione anche R ha una lista di parole riservate che non possono essere usate come variabili: FALSE TRUE Inf NA NaN NULL F T D break else for function if in next repeat while
    • Evitate di chiamare le vostre variabili q , t o c perche’ q(), t() e c() sono funzioni di R!
    • “ Tradizionalmente” in R non si usano gli underscore (_) per o nomi lunghi di variabili (Es: data_lab_01 ), meglio usare una notazione “a cammello” (Es: DataLab01 )
  • 12. Workspace
    • L’insieme degli oggetti creati in una sessione di R viene chiamato workspace .
      • In ogni momento e’ possibile avere la lista degli oggetti attualmente inizializzati con il comando ls (). > ls() [1] &quot;comp&quot; &quot;fx&quot; &quot;i&quot; &quot;n&quot; &quot;x&quot;
      • Possiamo rimuovere un oggetto dal workspace con il comando rm() > rm(comp)
      • Per rimuovere tutti gli oggetti dal workspace: > rm(list=ls()) L’argomeno “list” della funzione rm specifica la lista degli oggetti da rimuovere
    • Cercate di tenere “in ordine” il vostro workspace:
      • Date alle variabili nomi sensati! (qeqwewfgygy7656 non e’ un nome sensato)
      • Rimuovete le variabili non utilizzate
    • Quando usciamo da R (comando q() ) viene data la possibilita’ di salvare un’immagine del workspace. Se salviamo il workspace questo verra’ ricaricato automaticamente la prossima volta che apriamo R.
  • 13. Working Directory
    • La working directory e’ la directory di default dove R salva i file generati
      • Verifica la directory di lavoro corrente con getwd()
      • Il comando setwd(PATH) sposta la directory di lavoro
      • Il comando dir() permette di visionare il contenuto della directory di lavoro
    > setwd(&quot;/Users/default/Desktop/R_DRAFT&quot;) > getwd() [1] &quot;/Users/default/Desktop/R_DRAFT&quot; > dir() [1] &quot;LASTPRDM.txt&quot; &quot;PRDM_27_3_2007.log&quot;
  • 14. Tipologie di Dati
    • Gli oggetti in R possono essere di varie tipologie
      • character : stringhe o sequenze di caratteri > pippo <- “PIPPO!”
      • numeric : numeri reali > n <- 10.00001
      • integer : numeri interi (con segno eventualmente) > i <- -7
      • logical : possono assumere valori TRUE o FALSE (T,F) > fx <- true
      • complex : numeri complessi > comp <- 7 + 3i
      • raw : contiene sequenze di bytes > xx <- raw(2)
  • 15. Vettori
    • La struttura dati piu’ semplice disponibile in R e’ il vettore.
    • Un vettore e’ un insieme indicizzato di oggetti (numeri, stringhe etc…)
    • Per creare un semplice vettore di lunghezza 1 (uno scalare) :
      • x <- 4
      • x
      • [1] 4
    • I’indice [1] indica che il valore alla destra di [1] e’ il primo valore del vettore.
    • A che classe appartiene l’oggetto x ?
      • class(x)
      • [1] “numeric”
    • x e’ un vettore di tipo numeric
    • Nota: in R e’ possibile usare anche = come operatore di assegnamento
      • x = 4
  • 16. Vettori: c() and length()
    • Per creare un vettore y che contenga i valori: 1,5,6,7,9 possiamo usare il comando c() “ concatenate ” :
      • y <- c(1,5,6,7,9)
      • y
      • [1] 1 5 6 7 9
      • Il comando c() serve per concatenare gli elementi passati come argomenti separati da virgola c(arg1,arg2,arg3) .
    • Per sapere quanti elementi ci sono in y possiamo usare il comando length():
      • length(y)
      • [1] 5
      • Il vettore y contiene 5 elementi
    • Come per il vettore x precedente, possiamo usare il comando class() per sapere il tipo di dato contenuto in y:
      • class(y)
      • [1] &quot;numeric&quot;
  • 17. Accedere agli elementi di un Vettore
    • Per accedere agli elementi presenti in un vettore possiamo usare l’indice all’interno della coppia di parentesi: [i]
      • x <- 1:20 <- Creazione di una sequenza di numeri 1-20
      • x
      • [1] 1 2 3 4 5 6 7 8 9 10
      • [11] 11 12 13 14 15 16 17 18 19 20
    • L’indice [11] indica che l’elemento a destra di [11] e’ l’undicesimo elemento del vettore. Quindi l’elemento “16” e’ il sediciesimo elemento del vettore.
    • Per accedere ad un elemento usiamo il nome del vettore seguito dall’indice dell’elemento (tra parentesi quadre ):
      • x[1]
      • [1] 1
      • x[16]
      • [1] 16
  • 18. Inizializzazione e Riempimento
    • Negli esempi precedenti abbiamo inizializzato e riempito un vettore con un singolo comando:
      • x <- c(1,4,5)
    • possiamo suddividere l’operazione di creazione di un vettore in due fasi
      • Inizializzazione della struttura dati
      • Riempimento della struttura dati
    • Per inizializzare un vettore specifichiamo la tipologia di dato che il vettore dovra’ contenere, ovvero specifichiamo la modalita’ (la classe) e la lunghezza.
      • x <- numeric(3)
      • x
      • [1] 0 0 0
    • Abbiamo inizializzato un vettore di tipo numeric e lunghezza 3, possiamo ora riempirlo elemento per elemento:
      • x[1] <- 7
      • x[3] <- 9
      • x
      • [1] 7 0 9
  • 19. Metodi per costruire un vettore in R
    • R fornisce numerosi strumenti per costruire un vettore:
      • Concatenazione con c()
        • x <- c(1,2,6,7)
        • x
        • [1] 1 2 6 7
      • Sequenza di valori con operatore “:”
        • x <- 1:10
        • x
        • [1] 1 2 3 4 5 6 7 8 9 10
      • Sequenza di valori usando la funzione seq(from,to) opzioni: by=incremento, length=lunghezza desiderata
        • x <- seq(1,10, by=0.5)
        • x
        • [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
        • [11] 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0
      • Sequenza di valori ripetuti usando la funzione rep(x,times)
        • x <- rep(TRUE,5)
        • x
        • [1] TRUE TRUE TRUE TRUE TRUE
  • 20. Metodi per costruire un vettore: scan()
    • Il metodo scan() legge dati dalla console R o da un file
      • scan(what=“character”)
    • Con il metodo scan() possiamo importare velocemente I dati contenuti, per esempio, in una colonna di un file excel.
    • Quando invochiamo il comando R si aspetta che incolleremo una serie di linee in console:
      • x <- scan()
      • 1:
    • Usiamo copy and paste per copiare una colonna di dati da un file excel e incollarla nella console R
    • Terminiamo l’inserimento dati con un riga vuota (premendo ENTER).
    • !ATTENZIONE! In R i numeri decimali usano il punto (.) come separatore e non la virgola!
    copy paste <ENTER> <ENTER>
  • 21. I vettori possono contenere un solo tipo di dati
    • I vettori in R sono pensati per contenere oggetti appartenenti alla stessa classe: non possiamo costruire un vettore che contenga numeri e caratteri
    • R prevede una serie di metodi per la trasformazione di un tipo in un altro. Tutte le funzioni as.* sono detti “metodi di coercizione” e si occupano delle conversioni, per esempio:
    • !ATTENZIONE! In alcuni casi la conversione e’ automatica!
    • x <- 1.7
    • class(x)
    • [1] &quot;numeric”
    • x <- as.integer(x)
    • x
    • [1] 1
    • class(x)
    • [1] &quot;integer”
    • x <- as.integer(1:5)
    • x
    • [1] 1 2 3 4 5
    • class(x)
    • [1] &quot;integer”
    • x[2] <- 2.3
    • x
    • [1] 1.0 2.3 3.0 4.0 5.0
    • class(x)
    • [1] “numeric”
    • x[3] <- “TRE”
    • x
    • [1] &quot;1&quot; &quot;2.3&quot; &quot;TRE&quot; &quot;4&quot; &quot;5”
    • class(x)
    • [1] &quot;character&quot;
  • 22. Indice di un Vettore
    • Per accedere agli elementi presenti in un vettore possiamo usare l’indice all’interno della coppia di parentesi: [i]
    • E’ possibile costruire un vettore di indici che permetta di estrarre e manipolare gli elementi di un secondo vettore.
    • Creiamo un vettore:
      • x <- -4:9
      • x
      • [1] -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9
    • Abbiamo visto come accede all’elemento i-esimo:
      • x[6]
      • [1] 1
    • Per accedere agli elementi da 5 a 8 possiamo scrivere
      • x[5:8]
      • [1] 0 1 2 3
    • Per accedere agli elementi con indice [2],[4],[7],[8] possiamo usare un vettore di indici
      • xindex <- c(2,4,7,8)
      • x[xindex]
      • [1] -3 -1 2 3
    9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 [14] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4] [3] [2] [1]
  • 23. Cercare elementi in un Vettore
    • Per cercare elementi in un vettore possiamo usare condizioni logiche:
      • x <- -4:9
      • x
      • [1] -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9
      • x < 2
      • [1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    • La condizione logica x < 2 puo’ restituire come risultato solo TRUE o FALSE a seconda che per il valore corrispondente all’elemento i-esimo sia verificata la condizione elemento[i] < 2
    • Possiamo combinare l’uso di condizioni logiche con il comando which() che restituisce gli indici degli elementi dove la condizione x < 2 e’ TRUE .
      • xindex <- which(x < 2)
      • xindex
      • [1] 1 2 3 4 5 6
    • Infine, possiamo usare il vettore di indici xindex per estrarre da x gli elementi che hanno valore < 2:
      • x[xindex]
      • [1] -4 -3 -2 -1 0 1
    • Esiste anche un metodo piu rapido (una scorciatoia):
      • x[x<2]
      • [1] -4 -3 -2 -1 0 1
    9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 [14] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4] [3] [2] [1]
  • 24. Operatori di comparazione e operatori logici Diverso da … Maggiore o uguale a … Minore o uguale a … Uguale a … Maggiore di … Minore di … Significato x != 2 != x >= 2 >= x <= 2 <= x == 2 == x > 2 > x < 2 < Esempio Operatore NOT OR AND Significato x > 2 ! x == 4 ! x > 2 | x == 0 | x < 2 & x != 0 & Esempio Operatore
  • 25. Accedere agli elementi di un Vettore: altri comandi
    • Alcuni altri comandi utili per accedere agli elementi di un vettore
      • x[-3]
      • [1] -4 -3 -1 0 1 2 3 4 5 6 7 8 9
      • Ritorna un vettore con tutti gli elementi in x eccetto il terzo
      • x[-c(1,4,3)]
      • [1] -3 0 1 2 3 4 5 6 7 8 9
      • Ritorna un vettore con tutti gli elementi eccetto il primo, quarto e terzo
      • unique(x)
      • [1] -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9
      • Ritorna un vettore con tutti I valori distinti in x
      • duplicated(x)
      • [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
      • Ritorna un vettore logico ad indicare se l’elemento e’ duplicato
      • unique(x[duplicated(x)])
      • Ritorna un vettore con tutti gli elementi che hanno duplicazioni
      • > x <- rep(c(&quot;A&quot;,&quot;B&quot;,&quot;C&quot;),c(10,12,11)) > unique(x[duplicated(x)])
      • [1] &quot;A&quot; &quot;B&quot; &quot;C&quot;
    9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 [14] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4] [3] [2] [1]
  • 26. Valori mancanti (NA)
    • R dispone di una valore predifinito per trattare I dati mancanti: NA (Not Available)
    • Questo simbolo indica l’assenza di qualsiasi valore e puo’ essere inserito in ogni tipo di oggetto ( numeric, integer, character, etc…)
    • La presenza di NA in un vettore di dati renderebbe impossibile qualsiasi calcolo: se il valore e’ mancante, non e’ possibile sapere il risultato del calcolo che lo coinvolge
    • Le funzioni logiche is.* verificano se un oggetto contiene un tipo di dato (esempi: is.numeric() , is.character() , etc …)
    • Per sapere se in un vettore ci sono valori NA possiamo usare la funzione is.na
    • Fortunatamente molti dei comandi in R prevedono la possibilita’ di trattare separatamente ed in modo automatico I valori NA
    > x <- c(NA,1,2,3,NA,NA) > x [1] NA 1 2 3 NA NA > is.na(x) [1] TRUE FALSE FALSE FALSE TRUE TRUE > which(is.na(x)) [1] 1 5 6 > x[!is.na(x)] [1] 1 2 3 > x <- c(NA,1,2,3,NA,NA) > mean(x) [1] NA > mean(x, na.rm=TRUE) [1] 2
  • 27. La funzione mean: na.rm > help(mean)
  • 28. Operazioni algebriche
    • Consideriamo I seguenti vettori:
      • x <- 4
      • y <- c(2,7,4,1)
    • In R gli operatori calcolano elemento per elemento:
      • x + y
      • [1] 6 11 8 5
      • x - y
      • [1] 2 -3 0 3
      • x * y
      • [1] 8 28 16 4
      • x / y
      • [1] 2.0000000 0.5714286 1.0000000 4.0000000
      • x %/% y (divisione intera)
      • [1] 2 0 1 4
      • x %% y (modulo)
      • [1] 0 4 0 0
      • y^2 (elevare a potenza)
      • [1] 4 49 16 1
    > help(Arithmetic)
  • 29. Altre operazioni algebriche Coseno cos() Seno sin() Logaritmo in base 10 log10 Logaritmo in base 2 log2() Logaritmo log() Exponential function (e) exp() Valore assoluto abs() Radice quadrata sqrt()
  • 30. Altre utili operazioni con i vettori
    • Rev
      • Rovescia gli elementi del vettore
    • Sort
      • Ordina gli elementi del vettore
    • Rev(sort(x))
      • Ordina in modo decrescente
    • Sum(x)
      • Somma gli elementi del vettore
    • Sum(x [x>2] )
      • Somma gli elementi di x che hanno un valore > 2
    • Sum(x>2)
      • Conta i TRUE
      • risponde alla domanda:
        • quanti elementi in x hanno un valore > 2?
    > y <- c(2,7,4,1) > y [1] 2 7 4 1 > rev(y) [1] 1 4 7 2 > sort(y) [1] 1 2 4 7 > rev(sort(y)) [1] 7 4 2 1 > sum(y) [1] 14 > sum(y[y>2]) [1] 11 > sum(y>2) [1] 2
  • 31. Factors
    • In statistica i dati qualitativi vengono descritti da attributi (es: sesso: M o F) eventualmente posti tra loro in qualche relazione (es: eta’: giovane, adulto, anziano)
    • Si parla di fenomeni qualitativi rilevati su scala ordinale o nominale
    • R fornisce una classe specifica per trattare questo tipo di dati: factor() , se i dati sono su scala ordinale si puo’ specificare l’attributo ordered
    • classi <- c(&quot;giovane&quot;,&quot;anziano&quot;,&quot;adulto&quot;)
    • vettore <- rep(classi,c(10,5,7))
    • x <- factor(vettore, levels=classi, ordered=T)
    • x
    • [1] giovane giovane [...] adulto
    • Levels: giovane < anziano < adulto
  • 32. NOTA: Espressioni e oggetti
    • Tipicamente in R applichiamo espressioni ad oggetti :
      • L’espressione mean(x) applica la funzione mean all’oggetto x:
      • Cosa succede se proviamo ad usare mean() con un oggetto di tipo character? > pippo <- &quot;My Name is Pippo” > mean(pippo) [1] NA Warning message: argument is not numeric or logical: returning NA in: mean.default(pippo)
      • Cosa e’ successo?
        • mean accede a pippo
        • Mean chiede a pippo a che classe appartiene
        • Pippo appartiene alla classe “character” (vector-character)
        • Mean non puo’ calcolare la media di un oggetto “character” quindi stampa “NA” (Not Available) e un messaggio di warning
  • 33. Espressioni e oggetti: polimorfismo
    • Come abbiamo visto, il risultato di una funzione in R dipende dal tipo di oggetto con cui viene invocata:
    • La funzione si comporta in modi differenti a seconda del tipo di oggetto con cui viene invocate ( polimorfismo ).
    • Esempio:
    > x <- rnorm(100, mean=10,sd=2) > class(x) [1] &quot;numeric&quot; > summary(x) Min. 1st Qu. Median Mean 3rd Qu. Max. 5.189 8.401 9.603 9.625 10.890 14.850 > x <- factor(vettore, levels=classi, ordered=T) > summary(x) giovane anziano adulto 10 5 7
  • 34. Utili operazioni di ricodifica
    • Rimuovere NA
      • x <- c(NA,1,2,NA,3,5)
      • x[!is.na(x)]
      • [1] 1 2 3 5
      • x[is.na(x)] = -1
      • x
      • [1] -1 1 2 -1 3 5
    • Ifelse()
      • sex <- c(&quot;M&quot;,&quot;F&quot;,&quot;M&quot;,&quot;F&quot;)
      • ifelse(sex==&quot;M&quot;, &quot;maschio&quot;, &quot;femmina&quot;)
      • [1] &quot;maschio&quot; &quot;femmina&quot; &quot;maschio&quot; &quot;femmina”
    • Standardizzare I dati
      • x <- rnorm(100,mean=150,sd=10)
      • z <- (x - mean(x)) / sd(x)