Tommaso C. & Marco G.
2 - 4 Novembre 2016
m
## [,1] [,2]
## [1,] "a11" "a12"
## [2,] "a21" "a22"
m[2,1]
## [1] "a21"
m[2,2] <- 0
m
## [,1] [,2]
## [1,] "a11" "a12"
## [2,] "a21" "0"
x <- 1:24
m <- matrix (x,nrow=4) # dato un vettore genera una matrice di 4 righe
#utilizzandone gli elementi
m # si noti l’ assegnamento dei valori "per colonne"
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 5 9 13 17 21
## [2,] 2 6 10 14 18 22
## [3,] 3 7 11 15 19 23
## [4,] 4 8 12 16 20 24
Parametri di matrix (si veda l’help per maggiori dettagli):
x <- 1:8
m <- matrix(x, ncol = 4, byrow = TRUE)
m
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
m <- matrix (x, ncol = 5)
## Warning in matrix(x, ncol = 5): data length [8] is not a sub-multiple or
## multiple of the number of columns [5]
m # in questo caso ha riciclato i valori 1, 2
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 3 5 7 1
## [2,] 2 4 6 8 2
Ricordate la funzione names()?
Ricordate la funzione names() ?
colnames(m) <- c("col1", "col2", "col3", "col4")
rownames(m) <- c("row1", "row2", "row3")
m
## col1 col2 col3 col4
## row1 1 2 3 4
## row2 5 6 7 8
## row3 9 10 11 12
Le matrici possono essere costruite anche tramite le funzioni cbind ed rbind
x <- 1:3
y <- 5:7
m <- cbind(x,y) # lega vettori o matrici orizzontalmente
## x y
## [1,] 1 5
## [2,] 2 6
## [3,] 3 7
m <- rbind(x,y) # lega vettori o matrici verticalmente
## [,1] [,2] [,3]
## x 1 2 3
## y 5 6 7
m
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 5 9 13 17 21
## [2,] 2 6 10 14 18 22
## [3,] 3 7 11 15 19 23
## [4,] 4 8 12 16 20 24
length(m)
## [1] 24
mode(m)
## [1] "numeric"
dim(m)
## [1] 4 6
nrow(m)
## [1] 4
ncol(m)
## [1] 6
dim(m) == c(nrow(m), ncol(m)) # controlliamo che i valori corrispondano
## [1] TRUE TRUE
A
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
B <- A * 2
B
## [,1] [,2]
## [1,] 2 6
## [2,] 4 8
A*B
## [,1] [,2]
## [1,] 2 18
## [2,] 8 32
A
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
B
## [,1] [,2]
## [1,] 1 1
## [2,] 1 0
A%*%B # == rbind(c(1 + 2, 1 + 0), c(3 + 4, 3 + 0) )
## [,1] [,2]
## [1,] 3 1
## [2,] 7 3
N.B. il numero di colonne di A deve essere uguale al numeri di righe di B!!
A
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
B
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
# A%*%B Error in A %*% B : non-conformable arguments
Ricordate la definizione prodotto riga per colonna?
A
## [,1]
## [1,] 1
## [2,] 1
## [3,] 1
B
## [,1] [,2] [,3]
## [1,] 2 2 2
B%*%A # ottengo uno scalare
## [,1]
## [1,] 6
A%*%B # ottengo una matrice 3x3
## [,1] [,2] [,3]
## [1,] 2 2 2
## [2,] 2 2 2
## [3,] 2 2 2
il comando t(A) crea la matrice trasposta
A <- matrix(c (1,1,1), ncol = 1)
A
## [,1]
## [1,] 1
## [2,] 1
## [3,] 1
t(A)
## [,1] [,2] [,3]
## [1,] 1 1 1
diag(2)
## [,1] [,2]
## [1,] 1 0
## [2,] 0 1
diag(1:3)
## [,1] [,2] [,3]
## [1,] 1 0 0
## [2,] 0 2 0
## [3,] 0 0 3
diag(matrix(1:4,nrow=2))
## [1] 1 4
# esempio di moltiplicazione di una matrice per la sua inversa
solve(matrix(1:4,nrow=2))%*%matrix(1:4,nrow=2)
## [,1] [,2]
## [1,] 1 0
## [2,] 0 1
Risolvere il seguente sistema lineare:
\[ x_1 + x_2 = 4\] \[ 2x_1 + x_2 = 1 \]
solve(matrix(c(1,2,1,1), nrow = 2), c(4,1))
## [1] -3 7
m
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
m[, c(2,3)] #seleziona solo le colonne 2 e 3
## [,1] [,2]
## [1,] 2 3
## [2,] 6 7
## [3,] 10 11
m[, -1] # esclusione el. nella 1^ colonna
## [,1] [,2] [,3]
## [1,] 2 3 4
## [2,] 6 7 8
## [3,] 10 11 12
m
## col1 col2 col3 col4
## row1 1 2 3 4
## row2 5 6 7 8
## row3 9 10 11 12
m[m>4] # elementi > 4 (si ottiene un vettore)
## [1] 5 9 6 10 7 11 8 12
m["row3","col2"]
## [1] 10
a <- array(0, dim=c(2, 3 ,2))
a[1,2,1]<-6
a
## , , 1
##
## [,1] [,2] [,3]
## [1,] 0 6 0
## [2,] 0 0 0
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 0 0 0
## [2,] 0 0 0
day_off <- c(2, 2, 0, 0, 5, 8, 3, 4, 1, 0, 0, 7, 1,
7, 1, 5, 4, 0, 4, 0,1, 8, 9, 7, 0, 1, 7
, 2, 5, 5, 4, 3, 3, 0, 0, 2, 5, 1, 3, 0,
1, 0, 2, 4, 5, 0, 5, 7, 5, 1)
table(day_off)
## day_off
## 0 1 2 3 4 5 7 8 9
## 12 8 5 4 5 8 5 2 1
prop.table(table(day_off))
## day_off
## 0 1 2 3 4 5 7 8 9
## 0.24 0.16 0.10 0.08 0.10 0.16 0.10 0.04 0.02
# equivalente a calcolare
table(day_off)/length(day_off)
## day_off
## 0 1 2 3 4 5 7 8 9
## 0.24 0.16 0.10 0.08 0.10 0.16 0.10 0.04 0.02
Frequenze assolute nel caso di più variabili
sesso<-c(rep(c("M"), 20),rep(c("F"),30))
# immaginate di avere due vettori paralleli
table(day_off, sesso)
## sesso
## day_off F M
## 0 6 6
## 1 5 3
## 2 3 2
## 3 3 1
## 4 2 3
## 5 6 2
## 7 3 2
## 8 1 1
## 9 1 0
Frequenze relative nel caso di più variabili
# equivalente a calcolare table(day_off, sesso)/length(day_off)
prop.table(table(day_off, sesso))
## sesso
## day_off F M
## 0 0.12 0.12
## 1 0.10 0.06
## 2 0.06 0.04
## 3 0.06 0.02
## 4 0.04 0.06
## 5 0.12 0.04
## 7 0.06 0.04
## 8 0.02 0.02
## 9 0.02 0.00
xtable(table(day_off))
## % latex table generated in R 3.1.3 by xtable 1.7-4 package
## % Wed Nov 2 14:11:20 2016
## \begin{table}[ht]
## \centering
## \begin{tabular}{rr}
## \hline
## & day\_off \\
## \hline
## 0 & 12 \\
## 1 & 8 \\
## 2 & 5 \\
## 3 & 4 \\
## 4 & 5 \\
## 5 & 8 \\
## 7 & 5 \\
## 8 & 2 \\
## 9 & 1 \\
## \hline
## \end{tabular}
## \end{table}
Costruire due matrici M ed N di cinque colonne; M deve contenere i numeri da 1 a 15 ed N da 16 a 35. Costruire, se possibile, una matrice di 5 colonne che abbia come righe le righe di entrambe le matrici. Utilizzando M ed N, è possibile creare una matrice che abbia come colonne le colonne di entrambe le matrici?
Siano dati i seguenti studenti con relativi punteggi di esame:
Utilizzando le definizioni (non le formule predefinite di R)
sqrt(2^2) == 2
## [1] TRUE
#controllate che il PATH sia corretto
dati <- read.csv(file = "<PATH>dataset1.csv")
eta <- dati$Eta
voti <- dati$Voti
tentatitivi <- dati$Tentativi
a questo punto avrete un vettore eta, uno voti e uno tentativi contenenti 45222 valori numerici.
Per i vettori “voti”, “tentativi” ed “eta”:
Pur avendoli visti a lezione può capitare di dimenticarsi i nomi delle funzioni:
Pur avendoli visti a lezione può capitare di dimenticarsi i nomi delle funzioni:
Pur avendoli visti a lezione può capitare di dimenticarsi i nomi delle funzioni:
Pur avendoli visti a lezione può capitare di dimenticarsi i nomi delle funzioni:
Pur avendoli visti a lezione può capitare di dimenticarsi i nomi delle funzioni: