Creazione di Matrici in R

In questa lezione inizieremo a studiare la seconda struttura dati fondamentale di R: le matrici.

In particolare, vedremo come creare una matrice in R, partendo da un vettore di valori o da più vettori di valori.

Creazione di Matrici in R

Le matrici sono un importante strumento matematico e statistico. Per tal motivo R offre la possibilità di lavorare con esse in maniera diretta e semplice.

Ad un primo sguardo, una matrice può essere considerata come una disposizione di valori in forma tabellare, ossia disposti per righe e colonne.

In generale una matrice viene descritta come matrice m \times n, dove m rappresenta il numero di righe e n il numero di colonne. Per tal motivo una matrice di questo tipo contiene esattamente m \cdot n elementi. Ognuno di tali elementi può essere identificato tramite la coppia di indici (i, j), dove i rappresenta l'indice di riga e j l'indice di colonna.

Per cui una matrice può essere espressa come:

A = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \\ \end{bmatrix}

ed i singoli elementi di A possono essere identificati come a_{ij}.

La notazione comune è quella di usare lettere dell'alfabeto maiuscole per rappresentare le matrici, mentre lettere minuscole per rappresentare gli elementi di una matrice.

Per creare una matrice in R si utilizza la funzione matrix(). Questa funzione prende in ingresso un vettore di valori, un numero di righe e un numero di colonne. In uscita si ottiene una matrice con i valori disposti per colonne.

Per chiarire vediamo un esempio. Supponiamo di voler creare una matrice 2 \times 3 con i seguenti valori:

\begin{bmatrix} 1 & 3 & 5 \\ 2 & 4 & 6 \\ \end{bmatrix}

In R possiamo creare tale matrice con il seguente comando:

> matrice <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3)
> matrice
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

Alla funzione matrix abbiamo passato il vettore di valori c(1, 2, 3, 4, 5, 6), il numero di righe nrow = 2 e il numero di colonne ncol = 3. Da notare che gli elementi del vettore sono stati disposti per colonne. In altri termini, i primi due valori del vettore sono stati disposti nella prima colonna, i successivi due nella seconda colonna e così via.

I parametri nrow e ncol sono opzionali. Se non vengono specificati, la funzione matrix crea una matrice con un numero di righe pari alla lunghezza del vettore e un numero di colonne pari a 1.

> matrice <- matrix(c(1, 2, 3, 4, 5, 6))
> matrice
     [,1]
[1,]    1
[2,]    2
[3,]    3
[4,]    4
[5,]    5
[6,]    6

In questo caso la matrice creata è 6 \times 1.

Ovviamente, quando specifichiamo nrow e ncol dobbiamo assicurarci che il numero di elementi del vettore sia compatibile con il numero di righe e colonne richiesti.

In caso contrario possono verificarsi due eventualità:

  1. Se il numero di elementi del vettore è maggiore del numero di elementi della matrice, i valori in eccesso vengono scartati. Ad esempio:

    > matrice <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8), nrow = 2, ncol = 3)
    Warning message:
    In matrix(c(1, 2, 3, 4, 5, 6, 7, 8), nrow = 2, ncol = 3) :
      data length [8] is not a sub-multiple or multiple of the number of columns [3]
    > matrice
         [,1] [,2] [,3]
    [1,]    1    3    5
    [2,]    2    4    6
    

    In questo caso i valori 7 e 8 sono stati scartati.

  2. Se il numero di elementi del vettore è minore del numero di elementi della matrice, R ripete il vettore fino a riempire la matrice. Ad esempio:

    > matrice <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 3)
    Warning message:
    In matrix(c(1, 2, 3, 4), nrow = 2, ncol = 3) :
      data length [4] is not a sub-multiple or multiple of the number of columns [3]
    > matrice
         [,1] [,2] [,3]
    [1,]    1    3    2
    [2,]    2    4    3
    

    In questo caso, dato che il vettore ha solo 4 elementi, R ha potuto riempire solo le prime due colonne. Successivamente ha ripetuto il vettore per riempire la terza colonna.

Da notare che in entrambi i casi R ha generato un messaggio di avviso. Questo è utile per capire se la matrice è stata creata correttamente o meno.

Definizione

Creazione di una matrice in R - funzione matrix()

La funzione matrix() permette di creare una matrice in R. I parametri richiesti sono:

  • data: il vettore di valori da disporre nella matrice.
  • nrow: il numero di righe della matrice.
  • ncol: il numero di colonne della matrice.

La sintassi è la seguente:

matrix(data=vettore, nrow=numero_righe, ncol=numero_colonne)

Se i parametri nrow e ncol non vengono specificati, la funzione crea una matrice con un numero di righe pari alla lunghezza del vettore e un numero di colonne pari a 1.

Direzione di Disposizione dei Valori

Abbiamo già accennato che la funzione matrix() dispone i valori per colonne. Questo significa che, nel creare una matrice m \times n, i primi m valori del vettore vengono disposti nella prima colonna, i successivi m valori nella seconda colonna e così via.

In R è possibile modificare questo comportamento di matrix specificando il parametro byrow = TRUE. In questo modo i valori vengono disposti per righe.

Ad esempio, supponendo di voler creare la matrice 2 \times 3 con i valori:

\begin{bmatrix} 1 &amp; 2 &amp; 3 \\ 4 &amp; 5 &amp; 6 \\ \end{bmatrix}

Possiamo farlo con il seguente comando:

> matrice <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3, byrow = TRUE)
> matrice
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

In questo caso i valori sono stati disposti per righe.

Il comportamento di default di matrix è byrow = FALSE.

Definizione

Direzione di Disposizione dei Valori - parametro byrow

Il parametro byrow della funzione matrix() permette di specificare la direzione di disposizione dei valori. I valori ammessi sono TRUE e FALSE. Se byrow = TRUE, i valori vengono disposti per righe, altrimenti per colonne.

Creazione di Matrici a partire da vettori multipli

Nei paragrafi precedenti abbiamo visto come creare matrici a partire da un singolo vettore di elementi.

In R è possibile creare matrici a partire da più vettori di elementi. Questo è possibile grazie alla funzione cbind() e rbind().

Questa esigenza nasce spesso quando abbiamo più vettori ciascuno dei quali rappresenta una colonna o una riga della matrice.

Ad esempio, supponiamo di avere due vettori di 3 elementi ciascuno:

riga1 <- c(1, 2, 3)
riga2 <- c(4, 5, 6)

Possiamo creare una matrice 2 \times 3, dove ciascuno di essi rappresenta una riga, con il seguente comando:

> matrice <- rbind(riga1, riga2)
> matrice
      [,1] [,2] [,3]
riga1    1    2    3
riga2    4    5    6

In questo caso abbiamo utilizzato la funzione rbind() che prende in ingresso i vettori riga1 e riga2 e li dispone per righe.

Se invece volessimo creare una matrice 3 \times 2, dove ciascuno di essi rappresenta una colonna, possiamo utilizzare la funzione cbind():

> matrice <- cbind(riga1, riga2)
> matrice
      riga1 riga2
[1,]     1     4
[2,]     2     5
[3,]     3     6
Definizione

Creazione di Matrici a partire da vettori multipli - funzioni cbind() e rbind()

Le funzioni cbind() e rbind() permettono di creare matrici a partire da più vettori di elementi.

  • rbind(): prende in ingresso i vettori e li dispone per righe. Il prefisso r sta per row (riga).
  • cbind(): prende in ingresso i vettori e li dispone per colonne. Il prefisso c sta per column (colonna).

Dimensione di una Matrice

Per conoscere la dimensione di una matrice possiamo utilizzare la funzione dim(). Questa funzione restituisce un vettore con due elementi: il primo rappresenta il numero di righe e il secondo il numero di colonne.

Ad esempio, supponiamo di avere la matrice:

> matrice <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3)
> matrice
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

Possiamo conoscere la dimensione di matrice con il comando:

> dim(matrice)
[1] 2 3

Il vettore restituito da dim() ci dice che matrice ha 2 righe e 3 colonne.

Essendo un vettore, possiamo accedere ai singoli elementi di dim() tramite gli indici. Ad esempio, per conoscere il numero di righe possiamo scrivere:

> dim(matrice)[1]
[1] 2

e per conoscere il numero di colonne:

> dim(matrice)[2]
[1] 3
Definizione

Dimensione di una Matrice - funzione dim()

La funzione dim() permette di conoscere la dimensione di una matrice. Restituisce un vettore con due elementi: il primo rappresenta il numero di righe e il secondo il numero di colonne.

La sintassi è la seguente:

dim(matrice)

In Sintesi

In questa lezione abbiamo studiato che:

  • Una matrice è una struttura dati fondamentale di R.
  • Per creare una matrice si utilizza la funzione matrix().
  • La funzione matrix() prende in ingresso un vettore di valori, un numero di righe e un numero di colonne.
  • La funzione matrix() dispone i valori per colonne, ma è possibile specificare la direzione di disposizione dei valori con il parametro byrow.
  • È possibile creare matrici a partire da più vettori di elementi con le funzioni cbind e rbind.
  • La funzione dim() permette di conoscere la dimensione di una matrice.

Nella prossima lezione vedremo come accedere agli elementi di una matrice in R.