# Programmer en R/Manipuler les matrices

* Introduction
** Faire ses premiers pas
** Installer R
** Choisir son environnement de travail
** Installer des librairies
** Se documenter
* Manipulation et mise en forme des données
** Manipuler les nombres
** Manipuler les vecteurs
** Manipuler les chaînes de caractères
** Manipuler les facteurs
** Manipuler les dates et les heures
** Manipuler un tableau de données
** Manipuler une liste
* Importation et exportation des données
** Importer un fichier CSV
** Résoudre les problèmes d'encodage des caractères
** Importer un fichier TSV
** Importer un fichier texte à largeur fixe
** Importer des données depuis un tableur
** Import un fichier JSON
** Extraire des données d'une page web
* Visualisation de données
** Comprendre la grammaire des graphiques
** Représenter une carte
** Visualiser une carte choroplèthe
* Modélisation statistique
** Estimer un modèle de régression linéaire
** Estimer un modèle de régression circulaire
* Communication
* Programmation avancée
** Programmer une boucle
** Programmer une fonction
* Outils mathématiques
** Optimiser une fonction
** Manipuler les matrices
** Les fonctions statistiques de base
** Les loi de probabilités, ajustement et test
* Introduction
** Faire ses premiers pas
** Installer R
** Choisir son environnement de travail
** Installer des librairies
** Se documenter
* Manipulation et mise en forme des données
** Manipuler les nombres
** Manipuler les vecteurs
** Manipuler les chaînes de caractères
** Manipuler les facteurs
** Manipuler les dates et les heures
** Manipuler un tableau de données
** Manipuler une liste
* Importation et exportation des données
** Importer un fichier CSV
** Résoudre les problèmes d'encodage des caractères
** Importer un fichier TSV
** Importer un fichier texte à largeur fixe
** Importer des données depuis un tableur
** Import un fichier JSON
** Extraire des données d'une page web
* Visualisation de données
** Comprendre la grammaire des graphiques
** Représenter une carte
** Visualiser une carte choroplèthe
* Modélisation statistique
** Estimer un modèle de régression linéaire
** Estimer un modèle de régression circulaire
* Communication
* Programmation avancée
** Programmer une boucle
** Programmer une fonction
* Outils mathématiques
** Optimiser une fonction
** Manipuler les matrices
** Les fonctions statistiques de base
** Les loi de probabilités, ajustement et test
[ Modifier le sommaire ]

## Notion de matrice

Une matrice est un tableau en deux dimensions dont tous les éléments sont du même type. À l'instar des vecteurs, il ne s'agit pas ici de la notion algébrique de matrice, mais R dispose tout de même des opérateurs matriciels classiques. Pour R, un vecteur n'est pas la même chose qu'une matrice ligne ou colonne.

### Initialisation d'une matrice ligne ou colonne

Une matrice colonne s'obtient avec la commande rbind (row bind, association de lignes) ; une matrice ligne s'obtient avec la commande cbind (column bind, association de colonnes).
On peut initialiser une matrice avec des éléments tous identiques, avec la commande rep (replicate). Par exemple, pour créer des matrices nulles :
on remarque que l'utilisation de la commande rep « inverse » le comportement ligne/colonne, puisque rbind met en ligne un seul élément (qui est un vecteur), et que cbind met en colonne un seul élément (qui est un vecteur).

### Initialisation d'une matrice rectangulaire

Les matrices sont créées à partir d'un vecteur : les valeurs sont prises une par une pour remplir le tableau, colonne par colonne.
Avec la commande rbind, on associe plusieurs vecteurs, chaque vecteur étant une ligne du tableau. Avec la commande cbind, on associe plusieurs vecteurs, chaque vecteur étant une colonne du tableau.
On utilise également la commande matrix. L'argument data (1er argument par défaut) est le vecteur de données, l'argument nrow (2e par défaut) indique le nombre de lignes, et l'argument ncol (3e par défaut) indique le nombre de colonnes.
La syntaxe totale de la fonction matrix est la suivante :
Le paramètre data est un vecteur contenant les éléments de la matrice. Lorsque le vecteur contient moins d'éléments que la matrice à construire, les données du vecteur sont utilisées plusieurs fois, et lorsqu'il contient plus d'éléments, les éléments en trop sont ignorés. La dimension de la matrice est déterminée par nrow (nombre de lignes) et ncol (nombre de colonne). Lorsque byrow vaut TRUE, la matrice est complétée ligne par ligne, dans le cas contraire, colonne par colonne.
Pour initialiser une matrice nulle, on peut également utiliser rep :

### Accès aux éléments d'une matrice

De même que pour les vecteurs, les indices vont de 1 à nrow et de 1 à ncol.
* a[i, j] désigne l'élément de la ligne i et de la colonne j de la matrice a ;
* a[i, ] désigne le vecteur correspondant à la i-ième ligne de la matrice a ;
* a[, j] désigne le vecteur correspondant à la j-ième colonne de la matrice a ;
On peut également, pour les indices, utiliser des vecteurs d'indice, ou bien une matrice booléenne.
On remarque que la dernière solution renvoie un vecteur et non une matrice.
Enfin, on peut indexer une matrice par un seul indice ; R défile alors les colonnes de haut en bas, et de gauche à droite :
Le rapport entre l'indice unique ket la paire d'indices (i, j) est :
    j <- k%/%nrow(a) + 1
    i <- k%%nrow(a)
    k = (j - 1)*nrow(a) + i

## Arithmétique des matrices
### Opérations terme à terme

Il est possible d'additionner +, soustraire -, multiplier * et diviser des matrices /. Toutes ces opérations sont effectuées entre les coefficients correspondants des matrices. En particulier pour la multiplication, il ne s'agit pas de la multiplication matricielle telle qu'elle est définie en mathématiques, comme le montre l'exemple suivant.
| Matrice a | Matrice b |
| > a = matrix (c(1,2,3,4,5,6), 2, 3) > a [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 | > b = matrix (c(5,1,3,4,1,0), 2, 3) > b [,1] [,2] [,3] [1,] 5 3 1 [2,] 1 4 0 |
| Opération | Description | Résultat |
| a+b | Addition terme à terme | [,1] [,2] [,3] [1,] 6 6 6 [2,] 3 8 6 |
| a-b | Soustraction terme à terme | [,1] [,2] [,3] [1,] -4 0 4 [2,] 1 0 6 |
| a*b | Multiplication terme à terme | [,1] [,2] [,3] [1,] 5 9 5 [2,] 2 16 0 |
| a/b | Division terme à terme | [,1] [,2] [,3] [1,] 0.2 1 5 [2,] 2.0 1 Inf |

### Opérations algébriques

Soient A et B deux matrices.
La multiplication matricielle s'obtient avec l'opérateur %*% :
Cette syntaxe permet également de multiplier un vecteur par une matrice.
Le déterminant s'obtient avec la commande determinant :
La transposition de la matrice A se fait avec
Si A et B sont des matrices ligne (mais pas des vecteurs au sens de R), on peut donc calculer le produit scalaire
et si ce sont des matrices colonne, avec
et ainsi, la norme d'une matrice ligne ou colonne est
Si A est une matrice régulière (carrée inversible), on a son inverse avec
L'extraction des valeurs et vecteurs propres se fait avec