Tommaso C. & Marco G.
26 - 28 Ottobre 2016
Mercoledì | Venerdì | |
---|---|---|
Orario | 15:30 -17:30 | 15:30 -17:30 |
Aula | 309 | 307 |
Le lezioni del venerdì sono una replica di quelle del mercoledì.
Lo scopo è fornire un’introduzione a R e sfruttarlo come strumento per l’analisi dati.
Linguaggio interpretato:
Ottimo per l’elaborazione di dati statistici:
Installare R:
Per avviare R:
Uscire da R:
q()
Chiedere aiuto ad R
help() # chiede l'help generale
help(nomecomando) # chiede l'help del comando
?nomecomando # chiede l'help del comando
help.start() # lancia l'help in un browser
Ulteriori comandi base
ls() # mostra il contenuto del workspace
rm(i) # rimuove dal workspace la variabile i
rm(list=ls()) # rimuove tutto (dati, funzioni) dal workspace
save(a, b ,file="prova.rda") # salva le variabili a e b nel file 'prova.rda'
load("prova.rda") # ricarica nel workspace i dati salvati in precedenza
setwd(nome_directory) # sposta il controllo di R nella directory specificata
getwd() # visualizza la directory corrente
y <- c(5,7,8,NA,1,5,8)
y
## [1] 5 7 8 NA 1 5 8
y[3]
## [1] 8
c(1,4,5) # crea un vettore di interi
c("A","B","C") # crea un vettore di caratteri
c("gatto", "topo", "12") # crea un vettore di stringhe
La funzione c(arg1, arg2, arg3, …) concatena i suoi argomenti.
NB:
c("gatto", "topo",12)
## [1] "gatto" "topo" "12"
X <- c(1, 4, 5)
X
## [1] 1 4 5
La variabile X rappresenta ora il vettore <1 4 5>: si può pensare come un “contenitore” del vettore stesso. Un nuovo assegnamento cancella il contenuto precedente
X <- c(5,8,5)
X
## [1] 5 8 5
Y <- 100 # vettore formato da 1 solo elemento
Y
## [1] 100
x <- c(1,5,8,3)
y <- c(4,5,6,3)
z <- x + y
z
## [1] 5 10 14 6
d<- x - y
d
## [1] -3 0 2 0
p <- x * y
p
## [1] 4 25 48 9
q <- y / x
q
## [1] 4.00 1.00 0.75 1.00
x
## [1] 1 5 8 3
max(x)
## [1] 8
min(x)
## [1] 1
range(x)
## [1] 1 8
sum(x)
## [1] 17
prod(x)
## [1] 120
sort(x) #ordina il vettore
## [1] 1 3 5 8
order(x) # indici corrispondenti agli elementi ordinati
## [1] 1 4 2 3
x
## [1] 1 5 8 3
sort(x) #restituisce l'ordine ma x rimane invariato
## [1] 1 3 5 8
x<-sort(x) # restituisce l'ordine e lo assegna a x
x
## [1] 1 3 5 8
c(1:10)
## [1] 1 2 3 4 5 6 7 8 9 10
c (5:1)
## [1] 5 4 3 2 1
seq (1,10)
## [1] 1 2 3 4 5 6 7 8 9 10
seq (from=1, to=4, by=0.5)
## [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0
La funzione seq() può avere 5 argomenti (si veda l’ help).
rep( c(1,2), times=4)
## [1] 1 2 1 2 1 2 1 2
Sono vettori i cui elementi possono assumere valore TRUE o FALSE
as.numeric(TRUE)
## [1] 1
as.numeric(FALSE)
## [1] 0
x
## [1] 1 5 8 3
x > 5
## [1] FALSE FALSE TRUE FALSE
x <= 5
## [1] TRUE TRUE FALSE TRUE
x == 5
## [1] FALSE TRUE FALSE FALSE
x != 5
## [1] TRUE FALSE TRUE TRUE
x == c(5,6) # vale la "regola del riciclo"!
## [1] FALSE FALSE FALSE FALSE
x
## [1] 1 5 8 3
length(x)
## [1] 4
length(c(5,6))
## [1] 2
x == c(5,6) # == (x == c(5,6,5,6))
## [1] FALSE FALSE FALSE FALSE
x == c(3,6,8) # == (x == c(3,6,8,3))
## Warning in x == c(3, 6, 8): longer object length is not a multiple of
## shorter object length
## [1] FALSE FALSE TRUE TRUE
x <- c(1:4, NA)
x + 2
## [1] 3 4 5 6 NA
Si noti che NA non è un valore ma un marcatore di una quantità non disponibile:
x
## [1] 1 2 3 4 NA
x == NA
## [1] NA NA NA NA NA
is.na(x)
## [1] FALSE FALSE FALSE FALSE TRUE
Esistono diverse modalità di accesso a singoli elementi o a sottoinsiemi di elementi di un vettore. In generale la selezione e l’accesso avviene tramite l’operatore [] (parentesi quadre):
Esistono 4 diverse modalità di selezione/accesso:
x <- 5:10
x[1] # selezione di un singolo elemento
## [1] 5
x[5]
## [1] 9
length(x) # numero elementi nel vettore
## [1] 6
x[7] # accesso fuori range
## [1] NA
x[2:4]
## [1] 6 7 8
x[c(1,3,5)]
## [1] 5 7 9
Sono selezionati gli elementi di un vettore x che devono essere esclusi tramite un vettore y di indici negativi racchiuso fra parentesi quadre: x[y]
y <- rep(c("G","A","T","T"), times=3)
y
## [1] "G" "A" "T" "T" "G" "A" "T" "T" "G" "A" "T" "T"
z <- y[-(1:5)] # selezionati tutti gli elementi di y eccetto primi 5
z
## [1] "A" "T" "T" "G" "A" "T" "T"
z <- z[-length(z)] # cancellazione dell'ultimo elemento di z
z
## [1] "A" "T" "T" "G" "A" "T"
x <- c(1:5,NA,NA)
x
## [1] 1 2 3 4 5 NA NA
i <- c(rep(TRUE,times=3),rep(FALSE,times=4))
i
## [1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE
x[i]
## [1] 1 2 3
x[!is.na(x)] # selezione elementiche non sono NA
## [1] 1 2 3 4 5
x[!is.na(x) & x > 2]
## [1] 3 4 5
x<- 0:10
x
## [1] 0 1 2 3 4 5 6 7 8 9 10
x[ x < 2 | x > 6 ]
## [1] 0 1 7 8 9 10
“Scoppattiamo” questo esempio
minori<- x < 2
minori
## [1] TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
maggiori<- x > 6
maggiori
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
x[ minori | maggiori]
## [1] 0 1 7 8 9 10
Applicabile quando è stato impostato l’attributo names del vettore
campione <- c(45, 180, 70, 2007, 3)
names(campione) <-c("Eta","Altezza","Peso","AnnoIns","Ricoveri")
campione
## Eta Altezza Peso AnnoIns Ricoveri
## 45 180 70 2007 3
Eta.Anno <- campione[c("Eta","AnnoIns")]
Eta.Anno
## Eta AnnoIns
## 45 2007
Casi particolari delle funzione names
names(campione) <-c("Eta","Altezza","Peso","AnnoIns")
campione
## Eta Altezza Peso AnnoIns <NA>
## 45 180 70 2007 3
#il comando seguente non funziona
# names(campione) <-c("Eta","Altezza","Peso","AnnoIns", "Ricoveri", "Parite")
sample(1:6, 3)
## [1] 5 1 4
# sample(1:6, 7) errore!!!
# cerco di prendere un sample di 7 elementi partendo da un
# vettore di 6 elementi senza ripetizioni
sample(1:6, 7, replace=TRUE)
## [1] 2 6 1 3 2 6 5
x<- c (1.4,2.9, 6.453463,9.58761)
floor(x)
## [1] 1 2 6 9
ceiling(x)
## [1] 2 3 7 10
trunc(x)
## [1] 1 2 6 9
round(x, digits=3)
## [1] 1.400 2.900 6.453 9.588
x <- c(-3.2, -1.8, 2.3, 2.9)
floor(x)
## [1] -4 -2 2 2
trunc(x)
## [1] -3 -1 2 2
paste ("Gianni", "Pinotto", sep= " e ")
## [1] "Gianni e Pinotto"
y <- c ("Marco", " e ", "Pinotto")
z <- c ("Gianni", " e ","Pinotto")
setdiff(y,z)
## [1] "Marco"
Inserire i seguenti valori numerici in tre distinti vettori:
Quindi:
I seguenti dati rappresentano il numero di giorni in cui ciascuno di 20 lavoratori si è assentato per malattia nelle ultime sei settimane:
2, 2, 0, 0, 5, 8, 3, 4, 1, 0, 0, 7, 1, 7, 1, 5, 4, 0, 4, 0