3.4 Les matrices

Dans ce chapitre, nous allons voir notre seconde structure de données avancée : les matrices. Une matrice en R correspond à son équivalent mathématique : il s'agit d'une sorte de "tableau" qui contient généralement des nombres, et qui est organisé en ligne et en colonnes.

Créer une matrice

Pour déclarer une matrice en R, il suffit d'utiliser la fonction matrix() et de lui spécifier au moins deux éléments parmis trois :

  • Le nombre de lignes de la matrice avec l'argument nrow .
  • Le nombre de colonnes de la matrice avec l'argument ncol .
  • Des données pour remplir la matrice avec l'argument data .

Commencons par créer une matrice vide, de taille 2*2 :

matrix(nrow = 2, ncol = 2)

Le résultat que l'on obtient est une matrice deux par deux, remplie de NA :

Il est également possible de fourni un vecteur en données, et alors il n'est utile que de préciser une seule dimension de la matrice. Si nous donnons un vecteur de 4 nombres et deux colonnes, alors R saura que la matrice finale sera une matrice 2*2.

matrix(data = c(1, 2, 3, 4), nrow = 2)

Remarque : Si vous fournissez un vecteur trop grand, alors les élements en trop par rapport aux dimensions de la matrice ne seront pas utilisées. A l'inverse si il manque des éléments, ceux du vecteur seront "recyclés" jusqu'a remplir la matrice.

Modifier le sens de remplissage

Par défaut, le remplissage de la matrice se fait en colonne . Si vous voulez la remplir par les lignes, il faut utiliser le paramétre byrow et lui spéficier la valeur TRUE :

matrix(data = c(1, 2, 3, 4), nrow = 2, byrow = TRUE)

Créer une matrice d'autres élements que des nombres

Nous avons pour le moment crée des matrices uniquement composées de nombres, car cela correspond à leur usage mathématique. Mais R permet de créer des matrices composées de n'importe quel type de donnée.

Nous pouvons par exemple créer une matrice de chaines de caractères :

matrix(data = c("Washington", "Adams", "Jefferson", "Madison"), nrow = 2)

Tous les types atomiques integer , double , complex , character et logical peuvent être utilisés pour créer une matrice.

Il est aussi possible de créer une matrice à partir d'autres types de données, comme une list :

matrix(data = list(1, 67, "George", "Washington"), nrow = 2)

En pratique, on utilise principalement les types atomiques pour créer des matrices, et rarement d'autres types comme list ou closure , car cela a peu de sens.

La notion de class et de structure de données

Les matrices en R ne sont pas un type de données, mais une structure de données. C'est à dire qu'elles permettent de décrire comment organiser et manipuler les données, quelle que soit la nature de ces données en question. Si on regarde le type de données d'une matrice de nombres, on obtient ainsi le type correspondant aux données passées en argument data :

ma_matrice = matrix(data = c(1, 2, 3, 4), nrow = 2)
typeof(ma_matrice)

Voici ce qu'affiche la console :

Nous voyons bien que le type de notre variable est double , car nous avons passé en argument data un vecteur de type double . Notre matrice est bien une matrice de nombres, qui représente fondementalement des nombres de type double .

Si vous passer en argument data un vecteur de booléen, le type de la matrice sera logical . Le type d'une matrice correspond ainsi toujours à la nature des données fondementales contenues dan la matrice.

La class et structure des données

La structure des données en R est représentée par la classe d'un objet/variable, qui est donnée par la fonction class() :

ma_matrice = matrix(data = c(1, 2, 3, 4), nrow = 2)
class(ma_matrice)

Nous pouvons voir ici que notre variable ma_matrice est bien de classe matrix .

Cette classe représente comment les données sont structurées, et comment elles peuvent être manipuler par l'utilisateur. Une structure de donnée complexe est ainsi toujours composées de données d'un des types de bases, et par une classe qui indique la façon dont ces données sont organisées.

Nous pouvons voir les types de données comme des petite briques, et les structures avancées comme les matrices comme des constructions particuliéres réalisée à partir de ces données.

Il est fondementale de bien faire la différence entre la class et de type d'un objet et bien comprendre à chaque fois de quoi l'on parle.

Remarque : Tous les éléments ont une classe. Les objets qui représentent la nature des données (les vecteurs, listes, fonctions etc) ont alors une classe qui est identique à leur type. Par exemple la classe du vecteur c("Washington") sera character , comme son type. De même une liste aura la class type car sa structure de données correspond à son type.

A retenir :

  • On peut créer une matrice à l'aide de la fonction matrix() et en indiquant des données a l'aide du paramétre data ainsi qu'en spécifiant les dimensions à l'aide de nrow et ncol .
  • Si on créer une matrice vide (sans spécifier l'argument data ) alors elle sera remplie de NA .
  • On peut créer une matrice avec n'importe quel type de données : types atomiques, listes.
  • Une matrice représente une structure de données, qui correspond à la class matrix .
  • La classe d'un objet indique la structure de données qu'il représente, alors que son type indique la nature des données qu'il contient.
  • Les types de bases ont une classe identique à leur type.

results matching ""

    No results matching ""