# 12 values arranged as 3 rows x 4 columns, filled DOWN each column (default)
m <- matrix(1:12, nrow = 3)
m [,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
m[i, j]
apply()Construisez une matrice, nommez-la et sélectionnez dedans, agrégez lignes et colonnes, et multipliez — la grille base-R sur laquelle repose chaque jeu de données
Créez et manipulez des matrices en R : construisez-les avec matrix() (byrow, dimnames) et en liant des vecteurs avec cbind()/rbind() ; inspectez la forme avec dim()/nrow()/ ncol() ; nommez lignes et colonnes ; sélectionnez avec m[i, j] (et le piège drop = FALSE) ; agrégez avec rowSums()/colSums()/rowMeans()/colMeans() et apply() ; transposez avec t() ; et distinguez le calcul élément par élément de la multiplication matricielle %*%.
12 juillet 2026
12 juillet 2026
matrix(data, nrow, ncol, byrow), ou liez des vecteurs avec cbind() (en colonnes) / rbind() (en lignes).dim()/nrow()/ncol() renseignent la taille ; rownames()/colnames()/dimnames() étiquettent les axes.m[i, j] — mais une tranche d’une seule ligne ou colonne se réduit silencieusement à un vecteur, sauf si vous ajoutez drop = FALSE.rowSums()/colSums()/rowMeans()/colMeans(), ou n’importe quoi d’autre via apply(m, MARGIN, FUN).* est élément par élément ; la véritable multiplication matricielle est %*% ; t() transpose.Une matrice est une grille rectangulaire de nombres : une table de corrélation, une table de comptage de réponses à un sondage, les pixels d’une image en niveaux de gris, la matrice de conception derrière une régression. Chaque fois que vos données sont naturellement bidimensionnelles et que chaque cellule contient le même type, une matrice est le bon conteneur.
C’est l’étape au-dessus du vecteur : un vecteur est une simple ligne de valeurs du même type ; une matrice arrange ces valeurs en lignes et en colonnes. Comme un vecteur, une matrice ne contient qu’un seul type — mélangez des nombres et du texte et R coerce l’ensemble en character. Quand vous avez besoin de colonnes de types différents (un âge numeric à côté d’un nom character), vous voulez plutôt un data frame ; une matrice, c’est pour la grille tout-numérique.
Cette leçon couvre la boîte à outils pratique : comment construire une matrice, l’inspecter et la nommer, en extraire lignes et colonnes, les agréger, transposer et multiplier. Chaque exemple s’exécute dans votre navigateur.
La voie directe est matrix() : donnez-lui un vecteur de données et une forme. R remplit la grille colonne par colonne par défaut ; passez byrow = TRUE pour remplir ligne par ligne à la place. Vous n’avez besoin de préciser que l’un de nrow/ncol — R déduit l’autre de la longueur des données (?matrix).
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
Les mêmes données, remplies par lignes cette fois — remarquez comme les nombres se placent dans un ordre différent :
L’autre voie consiste à lier des vecteurs existants ensemble. cbind() les empile en colonnes ; rbind() les empile en lignes. C’est ainsi que vous assemblez une matrice à partir de données que vous avez déjà — trois mesures, chacune un vecteur, réunies en une seule table :
col1 col2 col3
[1,] 5 2 7
[2,] 6 4 3
[3,] 7 5 4
[4,] 8 9 8
[5,] 9 8 7
[,1] [,2] [,3] [,4] [,5]
col1 5 6 7 8 9
col2 2 4 5 9 8
col3 7 3 4 8 7
Remarquez que cbind() a repris les noms des vecteurs (col1, col2, col3) comme noms de colonnes automatiquement — une petite commodité bonne à connaître.
Trois fonctions renseignent la forme d’une matrice : nrow() et ncol() donnent les décomptes, et dim() renvoie les deux sous la forme c(rows, cols).
[1] 3
[1] 4
[1] 3 4
Une matrix() fraîchement créée n’a ni noms de lignes ni noms de colonnes — les emplacements s’affichent comme [1,], [,2]. Attachez des étiquettes avec rownames() et colnames(), ou définissez les deux d’un coup dans matrix() via dimnames (une liste de deux vecteurs : les noms de lignes, puis les noms de colonnes).
a b c d
r1 1 4 7 10
r2 2 5 8 11
r3 3 6 9 12
A B C
row1 1 3 5
row2 2 4 6
Pour confirmer qu’un objet est réellement une matrice, utilisez is.matrix() ; pour transformer une structure bidimensionnelle (comme un data frame entièrement numérique) en matrice, utilisez as.matrix().
m[i, j]Une matrice prend deux index entre les crochets — m[rows, columns]. Laissez un emplacement vide pour prendre toute cette dimension. C’est la compétence la plus utile sur les matrices.
a b c d
2 5 8 11
r1 r2 r3
7 8 9
[1] 8
a b
r1 1 4
r2 2 5
drop = FALSEQuand vous sélectionnez une seule ligne ou colonne, R « vous rend service » en simplifiant le résultat d’une matrice vers un simple vecteur — ce qui casse discrètement tout code ultérieur qui attendait de récupérer une matrice (avec ses dimensions et ses noms).
[1] "integer"
[1] "matrix" "array"
Ajoutez drop = FALSE chaque fois qu’une tranche d’une ligne ou d’une colonne doit rester une matrice. C’est la source d’innombrables surprises du type « pourquoi ma matrice s’est-elle transformée en vecteur ? ».
Pour toute la mécanique de l’indexation — index négatifs, conditions logiques, which(), et comment [ diffère de [[ et $ — voir Indexation et sous-ensembles. Les bases de [i, j] ci-dessus suffisent pour suivre le reste de cette leçon.
La raison la plus courante de recourir à une matrice est de la résumer par ligne ou par colonne. Quatre fonctions dédiées couvrent les cas habituels ; elles sont rapides et se lisent clairement. Nous utiliserons VADeaths, une matrice intégrée des taux de mortalité (pour 1000) en Virginie en 1940, ventilés par tranche d’âge (lignes) et groupe démographique (colonnes).
Rural Male Rural Female Urban Male Urban Female
50-54 11.7 8.7 15.4 8.4
55-59 18.1 11.7 24.3 13.6
60-64 26.9 20.3 37.0 19.3
65-69 41.0 30.9 54.6 35.1
70-74 66.0 54.3 71.1 50.0
rowSums() / colSums() totalisent chaque ligne / colonne ; rowMeans() / colMeans() en font la moyenne. Ici, les moyennes de lignes donnent le taux de mortalité moyen pour chaque tranche d’âge à travers les quatre groupes, et les moyennes de colonnes donnent le taux moyen pour chaque groupe à travers les tranches d’âge :
50-54 55-59 60-64 65-69 70-74
11.050 16.925 25.875 40.400 60.350
Rural Male Rural Female Urban Male Urban Female
32.74 25.18 40.48 25.28
Rural Male Rural Female Urban Male Urban Female
163.7 125.9 202.4 126.4
apply()rowSums() et ses semblables sont des raccourcis pour les quatre synthèses les plus courantes. Pour toute autre fonction — le max, l’écart-type, un calcul personnalisé — utilisez apply(m, MARGIN, FUN) : MARGIN = 1 parcourt les lignes, MARGIN = 2 parcourt les colonnes (?apply).
Rural Male Rural Female Urban Male Urban Female
66.0 54.3 71.1 50.0
50-54 55-59 60-64 65-69 70-74
3.260368 5.601414 8.147137 10.333441 9.852411
Rural Male Rural Female Urban Male Urban Female
[1,] 11.7 8.7 15.4 8.4
[2,] 66.0 54.3 71.1 50.0
Lisez la marge comme « quelle dimension est-ce que je conserve ? » — MARGIN = 2 renvoie une valeur par colonne, MARGIN = 1 une par ligne. apply() se généralise à n’importe quelle fonction, donc rowMeans(m) et apply(m, 1, mean) donnent la même réponse (rowMeans est simplement plus rapide et plus clair). Pour la famille apply élargie — lapply(), sapply(), tapply() — voir La famille apply.
L’arithmétique ordinaire sur une matrice fonctionne élément par élément, exactement comme sur un vecteur — chaque cellule est transformée indépendamment. Multipliez par un scalaire, ou prenez un log, et la forme reste inchangée :
[,1] [,2] [,3]
[1,] 10 30 50
[2,] 20 40 60
[,1] [,2] [,3]
[1,] 101 103 105
[2,] 102 104 106
[,1] [,2] [,3]
[1,] 1.000000 2.000000 2.584963
[2,] 1.584963 2.321928 2.807355
t() transpose — elle bascule les lignes en colonnes, transformant une matrice r × c en une matrice c × r :
[1] 2 3
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
La seule opération qui n’est pas élément par élément est la véritable multiplication matricielle, notée %*%. C’est le produit d’algèbre linéaire (lignes par colonnes) au cœur de la régression et de nombreux algorithmes — à ne pas confondre avec *. Les dimensions internes doivent correspondre : une matrice a × b multipliée par une matrice b × c donne un résultat a × c.
[,1] [,2]
[1,] 22 49
[2,] 28 64
[1] 2 2
Utilisez * quand vous voulez mettre à l’échelle ou combiner les cellules position par position ; utilisez %*% quand vous entendez le produit algébrique. Les confondre est un bug classique — la section Problèmes courants y revient.
Les blocs ci-dessus ont été exécutés au moment de la construction. Éditez celui-ci et appuyez sur Run pour construire une matrice, la nommer, y sélectionner et agréger — il s’exécute dans votre navigateur via webR (aucune installation).
Collez une opération sur matrice qui se comporte mal et demandez à Prova « pourquoi une seule ligne de ma matrice est-elle devenue un vecteur, et comment la garder en matrice ? » — elle repère le drop = FALSE manquant (ou la confusion entre * et %*%) et réécrit la ligne, et comme le runtime est juste là, vous l’exécutez pour confirmer la forme sur vos données. Demandez à Prova →
Une seule ligne (ou colonne) de ma matrice s’est transformée en vecteur. Sélectionner une seule ligne ou colonne amène R à supprimer la dimension et à simplifier en vecteur, si bien que dim(), nrow() et les noms de colonnes disparaissent. Passez drop = FALSE pour conserver la structure de matrice : m[2, , drop = FALSE].
Mes nombres se sont transformés en texte après l’ajout d’une colonne. Une matrice ne contient qu’un seul type. Liez un vecteur character à une matrice numeric (ou glissez une seule chaîne dans les données) et R coerce chaque cellule en character, si bien que l’arithmétique cesse de fonctionner. Vérifiez avec is.character(m[1, 1]) ; si vous avez réellement besoin de colonnes de types mélangés, utilisez un data frame, pas une matrice.
* m’a donné le mauvais produit. A * B multiplie cellule par cellule (et exige des formes identiques) ; ce n’est pas le produit d’algèbre linéaire. Pour une véritable multiplication matricielle, utilisez A %*% B, où les dimensions internes doivent être compatibles (a × b fois b × c). Une erreur non-conformable arguments signifie presque toujours que vous avez utilisé %*% avec des dimensions incompatibles — vérifiez dim(A) et dim(B).
Utilisez matrix(data, nrow, ncol, byrow), par ex. matrix(1:12, nrow = 3) pour une grille 3×4 remplie colonne par colonne (ajoutez byrow = TRUE pour remplir par lignes). Vous n’avez besoin que de l’un de nrow/ncol — R déduit l’autre. Pour en construire une à partir de vecteurs existants, liez-les avec cbind() (en colonnes) ou rbind() (en lignes).
Utilisez les fonctions dédiées : rowSums(m), colSums(m), rowMeans(m), colMeans(m). Pour toute autre synthèse (max, sd, une fonction personnalisée), utilisez apply(m, 1, FUN) pour les lignes ou apply(m, 2, FUN) pour les colonnes.
Utilisez l’opérateur %*% : A %*% B. C’est la véritable multiplication matricielle (d’algèbre linéaire), et les dimensions internes doivent correspondre — une matrice a × b multipliée par une matrice b × c donne un résultat a × c. L’opérateur * simple, lui, multiplie élément par élément et constitue une opération différente.
Quand vous sélectionnez une seule ligne ou colonne, R supprime la dimension supplémentaire et simplifie le résultat en vecteur par défaut. Ajoutez drop = FALSE pour la garder en matrice : m[2, , drop = FALSE]. Voir Indexation et sous-ensembles pour toutes les règles.
Utilisez as.data.frame(m) pour transformer une matrice en data frame (les colonnes peuvent alors contenir des types différents), et as.matrix(df) pour faire l’inverse (toutes les colonnes sont coercées vers un unique type commun). Convertissez en data frame chaque fois que vous avez besoin de colonnes de types mélangés.
Créez une matrice m à partir de 1:12 avec 3 lignes, remplie par ligne. Nommez ses colonnes "a", "b", "c", "d". Puis (1) extrayez la colonne "b" en la gardant en matrice, (2) calculez la somme de chaque ligne, et (3) calculez la moyenne de chaque colonne.
m <- matrix(1:12, nrow = 3, byrow = TRUE)
colnames(m) <- c("a", "b", "c", "d")
# 1. Column "b", kept as a matrix
m[, "b", drop = FALSE]
# 2. Sum of each row
rowSums(m)
# 3. Mean of each column
colMeans(m)
A %*% B ?
Si A est 2×3 et B est 3×2, que vaut A %*% B ?
A. Multiplication élément par élément des deux matrices B. Une matrice 2×2 (véritable multiplication matricielle) C. Une erreur, parce que les formes diffèrent
Afficher la réponse
B. %*% est la véritable multiplication matricielle : les dimensions internes (3 et 3) correspondent, et le résultat a les dimensions externes — 2×2. La multiplication élément par élément est l’opérateur * simple, qui exigerait au contraire que les deux matrices aient la même forme.
Une matrice est la grille rectangulaire à type unique de R — le conteneur des tables de corrélation, des tables de comptage et des données numériques derrière la plupart des modèles. Construisez-la avec matrix() ou cbind()/rbind(), vérifiez sa forme avec dim(), étiquetez-la avec rownames()/colnames(), et extrayez lignes et colonnes avec m[i, j] — sans oublier drop = FALSE quand une tranche unique doit rester une matrice. Résumez avec rowSums()/colMeans() ou le apply() général, et gardez * (élément par élément) distinct de %*% (multiplication matricielle). Avec ces gestes, la moitié bidimensionnelle de R est à vous.
[, [[, $, y compris m[i, j] avec index négatifs et logiques. · La famille apply — apply() sur les marges plus lapply()/sapply()/tapply() pour les listes, les vecteurs et les groupes. · Jeux de données intégrés à R — des matrices d’entraînement comme VADeaths et state.x77.Prouvez que vous savez le faire. Maîtrisez toute la série Les bases de R — suivez votre parcours, construisez des projets et obtenez un certificat.
Passez à Pro — Prova illimité sur vos propres données et un certificat vérifiable qui atteste la compétence.
dès 15 $/mois facturé annuellement
✓ Vous êtes Pro — continuez. The runtime is the judge.
Recevez les nouvelles leçons R & Python par e-mail
Pratique, reproductible, sans spam. Désinscription à tout moment.
Double opt-in. Nous ne partageons jamais votre e-mail.
Cette leçon est reproductible : chaque résultat de cette page a été produit par le code affiché — modifiez n’importe quel bloc et appuyez sur Run pour le reproduire dans votre navigateur. The runtime is the judge.
@online{2026,
author = {},
title = {Matrices en R : créer, sélectionner et calculer avec
matrix()},
date = {2026-07-12},
url = {https://www.datanovia.com/learn/programming/r-foundations/matrices-in-r},
langid = {fr}
}