Accesso agli Elementi di una Matrice in R
Abbiamo visto come creare una matrice in R. Adesso, in questa lezione studieremo come accedere ai suoi elementi.
Si può accedere ai singoli elementi di una matrice in R utilizzando la stessa sintassi che si usa per accedere agli elementi di un vettore. Inoltre, è possibile estrarre intere righe o colonne da una matrice, estrarre sotto-matrici e estrarre la diagonale di una matrice.
Accesso ai singoli elementi di una matrice in R
L'accesso ai singoli elementi di una matrice in linguaggio R è molto simile al modo in cui si accede ai singoli elementi di un vettore. La differenza principale è che, mentre un vettore ha un solo indice, una matrice ha due indici: uno per le righe e uno per le colonne.
In particolare, la sintassi per accedere a un singolo elemento di una matrice è la seguente:
matrice[i, j]
dove matrice
è il nome della matrice, i
è l'indice della riga e j
è l'indice della colonna. Si noti che l'ordine degli indici è importante.
Ad esempio, se abbiamo la seguente matrice:
> m <- matrix(1:9, nrow = 3, ncol = 3)
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
possiamo accedere al primo elemento della matrice (che si trova nella prima riga e nella prima colonna) come segue:
> m[1, 1]
[1] 1
Analogamente, possiamo accedere al quinto elemento della matrice (che si trova nella seconda riga e nella seconda colonna) come segue:
> m[2, 2]
[1] 5
E così via.
Accesso ai singoli elementi di una matrice in R
Per accedere a un singolo elemento di una matrice in R, si utilizza la sintassi è la seguente:
matrice[i, j]
dove matrice
è il nome della matrice, i
è l'indice della riga e j
è l'indice della colonna.
Modifica di un singolo elemento di una matrice in R
L'indicizzazione dei singoli elementi di una matrice in R può essere usata anche per modificare gli elementi stessi della matrice.
Ad esempio, tornando alla matrice di sopra:
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
se vogliamo modificare l'elemento che si trova nella seconda riga e nella terza colonna (che è attualmente 8) in 10, possiamo farlo come segue:
> m[2, 3] <- 10
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 10
[3,] 3 6 9
Modifica di un singolo elemento di una matrice in R
La sintassi per modificare un singolo elemento di una matrice in R è la stessa di quella per accedere a un singolo elemento:
matrice[i, j] <- nuovo_valore
dove matrice
è il nome della matrice, i
è l'indice della riga, j
è l'indice della colonna e nuovo_valore
è il valore che si vuole assegnare all'elemento.
Estrazione di righe e colonne da una matrice in R
Oltre all'accesso ai singoli elementi, è possibile estrarre intere righe o colonne da una matrice in R.
Ad esempio, supponiamo di avere la seguente matrice
> m <- matrix(1:9, nrow = 3, ncol = 3)
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
Per estrarre la seconda riga della matrice, possiamo usare la seguente sintassi:
> m[2, ]
[1] 2 5 8
In poche parole, abbiamo omesso l'indice della colonna, ottenendo così l'intera seconda riga della mat matrice.
Analogamente, per estrarre la terza colonna della matrice, possiamo usare la seguente sintassi:
> m[, 3]
[1] 7 8 9
Estrazione di righe e colonne da una matrice in R
Per estrarre un'intera riga da una matrice in R, si utilizza la sintassi:
matrice[i, ]
dove matrice
è il nome della matrice e i
è l'indice della riga.
Viceversa, per estrarre un'intera colonna da una matrice in R, si utilizza la sintassi:
matrice[, j]
dove matrice
è il nome della matrice e j
è l'indice della colonna.
Modificare righe e colonne di una matrice in R
L'indicizzazione delle righe e delle colonne di una matrice in R può essere usata anche per modificare le righe e le colonne stesse della matrice.
Ad esempio, tornando alla matrice di sopra:
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
se vogliamo modificare la seconda riga della matrice in c(10, 11, 12)
, possiamo farlo come segue:
> m[2, ] <- c(10, 11, 12)
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 10 11 12
[3,] 3 6 9
Analogamente, se vogliamo modificare la terza colonna della matrice in c(13, 14, 15)
, possiamo farlo come segue:
> m[, 3] <- c(13, 14, 15)
> m
[,1] [,2] [,3]
[1,] 1 4 13
[2,] 10 11 14
[3,] 3 6 15
Ovviamente bisogna prestare attenzione a che le dimensioni delle righe e delle colonne che si vogliono sostituire siano compatibili con quelle della matrice. In caso contrario R restituirà un errore.
Ad esempio:
> m <- matrix(1:9, nrow=3)
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> m[2, ] <- c(10, 11, 12, 13)
Error in m[2, ] <- c(10, 11, 12, 13) :
number of items to replace is not a multiple of replacement length
Modifica di righe e colonne di una matrice in R
La sintassi per modificare un'intera riga o colonna di una matrice in R è la stessa di quella per estrarre un'intera riga o colonna:
matrice[i, ] <- nuova_riga
per le righe e:
matrice[, j] <- nuova_colonna
per le colonne, dove matrice
è il nome della matrice, i
è l'indice della riga, j
è l'indice della colonna e nuova_riga
e nuova_colonna
sono i nuovi valori che si vogliono assegnare.
La condizione necessaria è che le dimensioni delle righe e delle colonne che si vogliono sostituire siano compatibili con quelle della matrice. In caso contrario R restituirà un errore.
Estrazione di sotto-matrici da una matrice in R
In R è possibile estrarre sotto-matrici da una matrice.
Ad esempio, supponiamo di avere la seguente matrice
> m <- matrix(1:9, nrow = 3, ncol = 3)
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
Per estrarre la sotto-matrice formata dalle prime due righe e dalle prime due colonne, possiamo usare la seguente sintassi:
> m[1:2, 1:2]
[,1] [,2]
[1,] 1 4
[2,] 2 5
In poche parole, al posto di singoli indici, abbiamo usato vettori di indici, ottenendo così la sotto-matrice desiderata.
Supponiamo di voler estrarre la sotto-matrice formata dalla prima colonna e dalla terza colonna. Possiamo farlo come segue:
> m[, c(1, 3)]
[,1] [,2]
[1,] 1 7
[2,] 2 8
[3,] 3 9
Estrazione di sotto-matrici da una matrice in R
La sintassi di indicizzazione di una matrice può essere estesa per estrarre sotto-matrici. In tal caso è sufficiente fornire vettori di indici al posto di singoli indici.
La sintassi generale per estrarre una sotto-matrice da una matrice in R è la seguente:
matrice[indici_righe, indici_colonne]
dove matrice
è il nome della matrice, indici_righe
è un vettore di indici delle righe e indici_colonne
è un vettore di indici delle colonne.
Estrazione della diagonale di una matrice in R
Un'altra operazione molto comune che viene effettuata per le matrici è l'estrazione della diagonale.
Ad esempio, supponiamo di avere la seguente matrice
> m <- matrix(1:9, nrow = 3, ncol = 3)
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
Per estrarre la diagonale della matrice in R, possiamo usare la funzione diag()
come segue:
> diag(m)
[1] 1 5 9
In poche parole, la funzione diag()
restituisce la diagonale della matrice passata come argomento.
Estrazione della diagonale di una matrice in R
Per estrarre la diagonale di una matrice in R, si utilizza la funzione diag()
come segue:
diag(matrice)
Indicizzazione Negativa
Così come per i vettori, è possibile utilizzare l'indicizzazione negativa per escludere determinate righe o colonne da una matrice.
Ritorniamo alla matrice
> m <- matrix(1:9, nrow = 3, ncol = 3)
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
Per escludere la seconda riga dalla matrice, possiamo usare la seguente sintassi:
> m[-2, ]
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 3 6 9
Analogamente, per escludere la seconda colonna dalla matrice, possiamo usare la seguente sintassi:
> m[, -2]
[,1] [,2]
[1,] 1 7
[2,] 2 8
[3,] 3 9
Indici negativi e positivi per le Matrici
A differenza del caso dei vettori, per le matrici indici negativi e indici positivi possono essere usati insieme purché non usati per la stessa dimensione. In altre parole, possiamo usare indici negativi per le righe e indici positivi per le colonne, o viceversa. Ma non possiamo usare indici negativi e positivi per le righe o per le colonne.
Ad esempio, possiamo usare la seguente sintassi per rimuovere la seconda riga e prendere soltanto la prima e la terza colonna:
> m[-2, c(1, 3)]
[,1] [,2]
[1,] 1 7
[2,] 3 9
Ma non possiamo usare la seguente sintassi:
> m[c(-2, 1), c(1, 3)]
Error in m[c(-2, 1), c(1, 3)] :
only 0's may be mixed with negative subscripts
In questo caso, per le righe abbiamo usato indici negativi e positivi insieme e ciò non è permesso.
Indicizzazione Negativa per le Matrici
Si possono usare indici negativi per escludere determinate righe o colonne da una matrice in R.
La sintassi generale per l'indicizzazione negativa di una matrice è la seguente:
matrice[-indici_righe, -indici_colonne]
dove matrice
è il nome della matrice, indici_righe
è un vettore di indici delle righe da escludere e indici_colonne
è un vettore di indici delle colonne da escludere.
In Sintesi
Abbiamo visto in questa lezione che:
-
si può accedere ai singoli elementi di una matrice in R utilizzando la stessa sintassi che si usa per accedere agli elementi di un vettore, ossia usando l'operatore di indicizzazione
[]
ma con due indici, uno per le righe e uno per le colonne:matrice[i, j]
-
si può modificare un singolo elemento di una matrice in R usando la stessa sintassi di quella per accedere a un singolo elemento:
matrice[i, j] <- nuovo_valore
-
è possibile estrarre intere righe o colonne da una matrice in R usando la stessa sintassi di quella per accedere a un singolo elemento:
matrice[i, ]
per le righe e:
matrice[, j]
per le colonne.
-
si possono modificare intere righe o colonne di una matrice in R usando la stessa sintassi di quella per estrarre intere righe o colonne:
matrice[i, ] <- nuova_riga
per le righe e:
matrice[, j] <- nuova_colonna
per le colonne.
-
si possono estrarre sotto-matrici da una matrice in R fornendo vettori di indici al posto di singoli indici:
matrice[indici_righe, indici_colonne]
-
si può estrarre la diagonale di una matrice in R usando la funzione
diag()
:diag(matrice)
-
si possono usare indici negativi per escludere determinate righe o colonne da una matrice in R:
matrice[-indici_righe, -indici_colonne]
Nella prossima lezione vedremo come effettuare operazioni matematiche sulle matrici in R.