Indice
Matrici
• In R le matrici sono le versioni bidimensionali dei vettori. Una matrice si crea con la funzione
matrix(dati, nrow=R, ncol=C, byrow, dimnames),
Input:
data vettore numerico di dimensione n m
nrow numero n di righe
ncol numero m di colonne
byrow = TRUE / FALSE elementi disposti per riga oppure per colonna
dimnames = etichette di riga e di colonna
Esempio:
> dati <- 1:6
> mat <- matrix(dati, nrow=2, ncol=3)
> mat
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
Esempio:
dati<- c(1:12)
> dati
[1] 1 2 3 4 5 6 7 8 9 10 11 12
> mat<- matrix(dati,3,4)
> mat
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
Esempio:
n <- 3
> m <- 3
> x <- 1:9
> riga <- c(“r1”, “r2”, “r3”)
> colonna <- c(“c1”, “c2”, “c3”)
> A <- matrix(data = x, nrow = n, ncol = m, byrow = FALSE, dimnames = list(riga, colonna))
> A
c1 c2 c3
r1 1 4 7
r2 2 5 8
r3 3 6 9
• matrix() riempie la matrice per colonne, il che non è quasi mai il comportamento desiderato. Per forzare il riempimento per righe aggiungiamo l’argomento byrow=T
mat <- matrix(dati, nrow=2, ncol=3, byrow=T)
> mat
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
Dare un nome alle righe.
rownames()
Esempio:
x <- matrix(data = c(1, 3, 5, 2, 4, 1), nrow = 2, ncol = 3, byrow = TRUE)
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 1
> rownames(x)
NULL
> rownames(x) <- c(“r1”, “r2”)
> x
[,1] [,2] [,3]
r1 1 3 5
r2 2 4 1
> rownames(x)
[1] “r1” “r2”
Dare un nome alle colonne.
colnames()
Esempio:
> x <- matrix(data = c(1, 3, 5, 2, 4, 1), nrow = 2, ncol = 3, byrow = TRUE)
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 1
> colnames(x)
NULL
> colnames(x) <- c(“c1”, “c2”, “c3”)
> x
c1 c2 c3
[1,] 1 3 5
[2,] 2 4 1
> colnames(x)
[1] “c1” “c2” “c3”
Un metodo alternativo per creare matrici
Possiamo partire da un vettore di valori e convertirlo in una matrice mediante la funzione dim()
Esempio:
values <- 1:12
> dim(values) <- c(3,4)
> values
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
Esempio:
n <- 3
> m <- 3
> x <- 1:9
> dim(x) <- c(n, m)
> x
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
Esempio:
n <- 1
> m <- 5
> x <- 1:5
> dim(x) <- c(n, m)
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
Accesso agli elementi della matrice
• L’accesso a un elemento di una matrice avviene con la notazione [R,C]
• R è la riga, C la colonna
> mat
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
> mat[2,3]
[1] 6
> mat[1,2] <- 7
> mat
[,1] [,2] [,3]
[1,] 1 7 3
[2,] 4 5 6
• Si può omettere l’indice della riga o della colonna per “prenderle” tutte:
> mat
[,1] [,2] [,3]
[1,] 1 7 3
[2,] 4 5 6
> mat[1,]
[1] 1 7 3
> mat[,1]
[1] 1 4
> mat[,1] <- c(123, 456)
> mat
[,1] [,2] [,3]
[1,] 123 7 3
[2,] 456 5 6
• Possiamo altresì specificare un vettore con le righe e/o colonne specifiche cui vogliamo accedere:
mat
[,1] [,2] [,3]
[1,] 1 7 3
[2,] 4 5 6
> mat[c(1,2),1]
[1] 1 4
> mat[1,c(2,3)]
[1] 7 3
Funzione head(): selezione delle prime n righe
Esempio:
Funzione tail(): selezione delle ultime n righe
Esempio:
Funzione vech(): Package: fUtilities . seleziona gli elementi della sezione triangolare inferiore di una matrice simmetrica.
Funzione xpnd() Package: MCMCpack: crea una matrice simmetrica a partire da un vettore:
Aggiungere righe o colonne ad una matrice.
Possiamo unire due oggetti (matrici o vettori) affiancandoli per colonna (con la funzione cbind()) o impilandoli per riga (con la funzione rbind())
• Quando la dimensione delle matrici/vettori non corrisponde, R risolve la cosa troncando le parti in eccesso o ripetendo le parti mancanti, senza dare messaggi di warning quando la lunghezza è un multiplo (fate attenzione!)
Alcune funzioni per le matrici
• length(M): restituisce il numero di elementi della matrice M
• dim(m): restituisce un vettore contenente le dimensioni (righe e colonne) della matrice M
• typeof(m): restituisce il tipo dei dati immagazzinati nella matrice
• mode(m): restituisce il tipo di immagazzinamento dei dati nella matrice
Operazioni matriciali
Data una matrice A
• Si può sommare a tutti i valori una costante z facendo A+z
• Si può moltiplicare tutti i valori per una costante z facendo z*A
• Si può moltiplicare A per un vettore z facendo A %*% z
Date due matrici A e B
• Si può sommare gli elementi di A e B facendo A+B
• Si può moltiplicare gli elementi di A e B facendo A*B
• Il prodotto “riga-per-colonna” di A e B si calcola facendo A %*% B
Esistono funzioni avanzate per risolvere sistemi lineari, calcolare il determinante, autovalori, autovettori…
Funzione det(): calcolo del determinante di una matrice:
Sia A una matrice di dimensione n x n:
Esempio:
Esempio:
Funzione as.vector() : trasforma la matrice in vettore di dimensione nm seguendo l’ordine delle colonne
Esempio:
[inbound_button font_size=”20″ color=”#ff8040″ text_color=”#ffffff” icon=”arrow-left” url=”https://matematicaoltre.altervista.org/linguaggio-r-le-operazioni-con-i-vettori.html” width=”” target=”_self”] I vettori[/inbound_button] [inbound_button font_size=”20″ color=”#ff8040″ text_color=”#ffffff” icon=”arrow-right” url=”https://matematicaoltre.altervista.org/linguaggio-r-gli-array.html” width=”” target=”_self”] Gli array[/inbound_button]
(862)