Indice
Matrici
Le matrici sono strutture di dati a due dimensioni, composte da un solo tipo di elementi. Per costruire una matrice, utilizziamo la funzione matrix()
, indicando un vettore di valori, e il numero di righe e di colonne:
matrix(c(5, 8, 10, 34, 7, 5), nrow = 2, ncol = 3)
Possiamo anche scrivere direttamente:
matrix(c(5, 8, 10, 34, 7, 5), 2, 3)
[,1] [,2] [,3] [1,] 5 10 7 [2,] 8 34 5
Una matrice può essere composta anche di altri tipi di valori:
# una matrice di elementi di testo matrix(letters[1:8], 4, 2)
[,1] [,2] [1,] "a" "e" [2,] "b" "f" [3,] "c" "g" [4,] "d" "h"
Come si è visto nei due esempi precedenti, gli elementi vengono disposti in sequenza e per colonna. Per disporli per riga, usiamo l'argomento byrow = TRUE
:
matrix(c(5, 8, 10, 34, 7, 5), 2, 3, byrow = TRUE)
[,1] [,2] [,3] [1,] 5 8 10 [2,] 34 7 5
Costruiamo la matrice M:
M <- matrix(c(5, 8, 10, 34, 7, 5), 2, 3) # attributi della matrice attributes(M)
$dim [1] 2 3
rownames e colnames
Le matrici hanno nomi di riga (rownames
), e nomi di colonna
(colnames
). Attribuiamo un nome alle colonne e alle righe della matrice:
colnames(M) <- c("C1", "C2", "C3") rownames(M) <- c("R1", "R2") M
C1 C2 C3 R1 5 10 7 R2 8 34 5
Controlliamo ora gli attributi della matrice:
attributes(M)
$dim [1] 2 3 $dimnames $dimnames[[1]] [1] "R1" "R2" $dimnames[[2]] [1] "C1" "C2" "C3"
Operazioni con matrici
Le operazioni sulle matrici vengono eseguite come per i vettori:
# operazioni sulle matrici M + 2
C1 C2 C3 R1 7 12 9 R2 10 36 7
Alle matrici si applicano però anche gli operatori del calcolo matriciale:
# trasposta t(M)
R1 R2 C1 5 8 C2 10 34 C3 7 5
Dataframe e matrici
Un dataframe composto di elementi dello stesso tipo (tipicamente, numerici), può facilmente essere trasformato in una matrice:
as.matrix(cars)
speed dist [1,] 4 2 [2,] 4 10 [3,] 7 4 [4,] 7 22 [5,] 8 16 [6,] 9 10 [7,] 10 18 [8,] 10 26 [9,] 10 34 [10,] 11 17 ...
I nomi di colonna rimangono.
In molti casi, questa trasformazione non è neanche necessaria, in quanto molti metodi si applicano tanto alle matrici, quanto ai dataframe, in funzione del tipo di vettori di cui sono composti:
# trasposta t(cars)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] speed 4 4 7 7 8 9 10 10 10 11 11 12 12 dist 2 10 4 22 16 10 18 26 34 17 28 14 20 ...
Funzioni
Molte funzioni si applicano dunque tanto alle matrici quanto ai dataframe:
matrix() | |
is.matrix() , as.matrix() | |
rownames() , colnames() | nomi di righe e colonne |
rbind() , cbind() (vedi) | unire righe e colonne |
rowSums() , colSums() | totali di riga e colonna |
rowMeans() , colMeans() | medie di riga e colonna |
Script di esempio
E' possibile scaricare ed eseguire lo script dell'esempio: