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.

Definizione

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
Definizione

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 3 \times 3:

> 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
Definizione

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
Definizione

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 3 \times 3:

> 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
Definizione

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 3 \times 3:

> 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.

Definizione

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 3 \times 3 di prima:

> 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
Nota

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.

Definizione

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.