Fonction matricielle dans R : créer, imprimer, ajouter une colonne et une tranche

⚡ Résumé intelligent

Une matrice en R est un tableau bidimensionnel qui contient un seul type de données sur m lignes et n colonnes, construit avec matrix(), étendu avec cbind() et rbind(), et accessible via des crochets.

  • 🧩 Structure: Une matrice est un vecteur doté d'un attribut de dimension, donc chaque cellule doit partager un même type de données.
  • Création: matrix(data, nrow, ncol, byrow) organise une séquence, et R déduit la dimension manquante.
  • (I.e. Exécuter la commande : byrow = FALSE remplit colonne par colonne, tandis que byrow = TRUE remplit ligne par ligne.
  • Croissance: cbind() ajoute des colonnes et rbind() ajoute des lignes, à condition que la dimension partagée corresponde.
  • Tranchage: m[row, column] lit d'abord les lignes, et un côté vide sélectionne tout ce qui se trouve de ce côté.
  • 🏷️ Étiquettes: dimnames, rownames() et colnames() remplacent les espaces réservés [,1] par des noms lisibles.
  • ➕➖ Arithmétique: L'astérisque multiplie élément par élément, tandis que %*% effectue une multiplication matricielle.

Fonction matricielle en R : Créer, imprimer, ajouter des colonnes et des tranches

Fonction matricielle dans R

Une fonction matricielle dans R est un tableau à 2 dimensions comportant m nombre de lignes et n nombre de colonnes. En d’autres termes, la matrice dans la programmation R est une combinaison de deux ou plusieurs vecteurs avec le même type de données.

En réalité, une matrice est simplement un vecteur possédant un attribut `dim` de longueur deux. C'est pourquoi chaque élément doit être de même type : dès qu'une valeur de type caractère est associée à des nombres, la matrice entière est convertie en caractère. R stocke les valeurs colonne par colonne et utilise `dim` pour déterminer la fin de chaque ligne. Type de données s'applique à l'objet entier en une seule fois.

À noter: La fonction `matrix()` renvoie toujours deux dimensions. Pour créer une structure à trois dimensions ou plus en R, utilisez `array()` avec un vecteur de dimensions, ou assignez directement `dim()`. Le diagramme ci-dessous illustre la disposition en lignes et en colonnes de toute matrice.

Disposition des lignes et des colonnes d'une fonction matricielle en R

Comment créer une matrice dans R

Nous pouvons créer une matrice avec la fonction matrice()La signature de base de R prend cinq arguments, et les trois plus fréquemment utilisés sont présentés ici :

matrix(data, nrow, ncol, byrow = FALSE)

Arguments:

  • données,: L'ensemble des éléments que R va organiser en lignes et en colonnes de la matrice.
  • maintenant: Nombre de lignes.
  • ncol: Nombre de colonnes.
  • parrow: Indicateur logique. Par défaut, avec byrow = FALSE, la matrice est remplie colonne par colonne, de haut en bas. Avec byrow = TRUE, elle est remplie ligne par ligne, de gauche à droite.
  • noms de dimensions: Une liste facultative de longueur deux fournissant les noms de lignes et les noms de colonnes.

Deux points importants de la documentation de base de R sont à connaître avant le premier exemple. Si seul l'un des paramètres `nrow` ou `ncol` est fourni, R déduit l'autre à partir de la longueur des données. De plus, si les données contiennent trop peu d'éléments pour correspondre à la forme demandée, les valeurs sont réutilisées plutôt que rejetées.

Construisons deux matrices 5×2 à partir de la séquence de nombres de 1 à 10, l'une avec byrow = TRUE et l'autre avec byrow = FALSE, pour observer la différence.

# Construct a matrix with 5 rows that contain the numbers 1 up to 10 and byrow =  TRUE 
matrix_a <-matrix(1:10, byrow = TRUE, nrow = 5)
matrix_a

Sortie :

Comme byrow = TRUE a été utilisé, la console remplit la première ligne avec 1 et 2, la deuxième ligne avec 3 et 4, et ainsi de suite.

Affichage console de la matrice_a remplie ligne par ligne avec byrow = TRUE

Maintenant, imprimons la dimension de la matrice dans R avec dim(). La syntaxe pour imprimer la matrice dans R en utilisant dim() est :

# Print dimension of the matrix with dim()
dim(matrix_a)

Sortie :

## [1] 5 2

La fonction dim() renvoie d'abord le nombre de lignes, puis le nombre de colonnes, confirmant ainsi la forme 5×2.

Remplir une matrice par colonne avec byrow = FALSE

Les mêmes dix nombres et la même rangée produisent une disposition différente lorsque le sens de remplissage change.ping Par défaut, la fonction byrow envoie les valeurs de la première colonne avant le début de la seconde.

# Construct a matrix with 5 rows that contain the numbers 1 up to 10 and byrow =  FALSE
matrix_b <-matrix(1:10, byrow = FALSE, nrow = 5)
matrix_b

Sortie :

Sortie console de la matrice_b remplie colonne par colonne avec byrow = FALSE

Encore une fois, imprimez la dimension de la matrice en utilisant dim(). Vous trouverez ci-dessous une syntaxe de la dimension de la matrice d'impression R :

# Print dimension of the matrix with dim()
dim(matrix_b)

Sortie :

## [1] 5 2

La forme reste inchangée à 5×2, car byrow modifie l'ordre de remplissage et jamais les dimensions.

Note: L'utilisation de la commande matrix_b <-matrix(1:10, byrow = FALSE, ncol = 2) aura le même effet que ci-dessus, puisque R déduit nrow = 5 à partir des dix valeurs fournies.

Vous pouvez également créer une matrice 4×3 avec la fonction `ncol`. R créera 3 colonnes et les remplira de haut en bas. Consultez un exemple.

matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_c

Sortie :

##       [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
## [3,]    3    7   11
## [4,]    4    8   12

Les en-têtes de colonnes [,1] à [,3] et les étiquettes de lignes [1,] à [4,] sont des espaces réservés par défaut dans R. Ils disparaissent dès que des noms de dimensions réels sont fournis, comme indiqué plus loin dans ce tutoriel.

Exemple :

dim(matrix_c)

Sortie :

## [1] 4 3

Ajouter une colonne à une matrice avec cbind()

Vous pouvez ajouter une colonne à une matrice R avec la commande `cbind()`. `cbind()` signifie « liaison de colonnes » et permet de concaténer autant de matrices ou de colonnes que spécifié. Par exemple, notre exemple précédent a créé une matrice 5×2. Nous y ajoutons une troisième colonne et vérifions que la dimension est bien de 5×3.

Exemple :

# concatenate c(1:5) to the matrix_a
matrix_a1 <- cbind(matrix_a, c(1:5))
# Check the dimension
dim(matrix_a1)

Sortie :

## [1] 5 3

Exemple :

matrix_a1

Sortie

##       [,1] [,2] [,3]
## [1,]    1    2    1
## [2,]    3    4    2
## [3,]    5    6    3
## [4,]    7    8    4
## [5,]    9   10    5

Exemple :

Il est également possible de lier plusieurs colonnes simultanément. Le bloc suivant construit la matrice a2, une matrice 4×3 contenant les nombres de 13 à 24, afin de la joindre à la matrice c, également de taille 4×3, pour obtenir un résultat 4×6 couvrant les nombres de 1 à 24.

matrix_a2 <-matrix(13:24, byrow = FALSE, ncol = 3)

Sortie :

##      [,1] [,2] [,3]
## [1,]   13   17   21
## [2,]   14   18   22
## [3,]   15   19   23
## [4,]   16   20   24

Exemple :

matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)		
matrix_d <- cbind(matrix_a2, matrix_c)
dim(matrix_d)

Sortie :

## [1] 4 6

REMARQUEPour que la fonction `cbind()` fonctionne, le nombre de lignes des matrices dans R doit être identique. En cas de différence, R réutilise la matrice la plus courte ou génère une erreur ; il est donc plus sûr de vérifier dim() sur les deux objets au préalable.

Alors que `cbind()` concatène les colonnes, `rbind()` ajoute les lignes. Ajoutons une ligne à notre matrice `matrix_c` et vérifions que sa dimension est bien de 5×3.

matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
# Create a vector of 3 columns
add_row <- c(1:3)
# Append to the matrix
matrix_c <- rbind(matrix_c, add_row)
# Check the dimension
dim(matrix_c)

Sortie :

## [1] 5 3

Notez que la liaison d'un vecteur nommé tel que add_row donne également ce nom à la nouvelle ligne, ce qui constitue la première étape vers les matrices étiquetées abordées plus loin.

Découper une matrice

Nous pouvons sélectionner un ou plusieurs éléments d'une matrice dans Programmation R en utilisant les crochets [ ]. À l'intérieur des crochets, le sélecteur de ligne précède le sélecteur de colonne, séparés par une virgule. C'est là que le découpage entre en jeu.

Par exemple :

  • Matrix_c[1,2] sélectionne l'élément de la première ligne et de la deuxième colonne.
  • matrix_c[1:3,2:3] donne un résultat de matrice R slice avec les données sur les lignes 1, 2, 3 et les colonnes 2 et 3.
  • Matrix_c[,1] sélectionne tous les éléments de la première colonne.
  • Matrix_c[1,] sélectionne tous les éléments de la première ligne.

Laisser un côté de la virgule vide signifie donc que toutes les valeurs de ce côté seront prises en compte. Une conséquence trompeuse pour les débutants : lorsqu’une seule ligne ou colonne est sélectionnée, R ignore la dimension vide et renvoie un vecteur simple. Ajouter `drop = FALSE`, comme dans `matrix_c[1, , drop = FALSE]`, permet de conserver une matrice dans le résultat.

Voici le résultat que vous obtenez pour les codes ci-dessus

Résultats de la console des quatre expressions de découpage de matrices en R

Nommez les lignes et les colonnes d'une matrice en R.

Les étiquettes par défaut telles que [,1] et [3,] rendent la sortie difficile à lire dès qu'une matrice a une signification réelle. L'argument dimnames, ainsi que les fonctions de remplacement rownames() et colnames(), ajoutent des étiquettes textuelles qui sont ensuite conservées avec la matrice lors des opérations cbind(), t() et de chaque découpage.

# Name the rows and columns while the matrix is built
sales <- matrix(1:6, nrow = 2, ncol = 3,
                dimnames = list(c('north', 'south'), c('q1', 'q2', 'q3')))

# Or attach the names afterwards
rownames(sales) <- c('north', 'south')
colnames(sales) <- c('q1', 'q2', 'q3')

# Read the names back as a list of two character vectors
dimnames(sales)

# Names make label based slicing possible
sales['north', 'q2']
Fonction Lit Ensembles
noms de dimensions(m) Les deux dimensions sous forme de liste de deux vecteurs dimnames(m) <- list(rows, cols)
noms de lignes(m) Les étiquettes de ligne rownames(m) <- lignes
noms de colonnes(m) Les étiquettes de colonne colnames(m) <- cols
dim(m) Lignes et colonnes sous forme de deux entiers dim(m) <- c(nrow, ncol)

Une fois les étiquettes définies, `sales['north', 'q2']` est bien plus clair que `sales[1, 2]` et est conservé même après un réordonnancement des lignes. Définir un composant `dimnames` sur `NULL` supprime à nouveau cet ensemble d'étiquettes, et une matrice convertie avec `as.data.frame()` conserve directement ses noms de lignes et de colonnes. trame de données.

Matrice OperaFonctions en R : arithmétique, transposition et multiplication

C’est dans les opérations arithmétiques sur les matrices que la règle du type unique s’avère avantageuse. R de base gère l’ensemble des opérations sans package supplémentaire, mais deux opérateurs sont faciles à confondre : * multiplie élément par élément, tandis que %*% effectue une véritable multiplication matricielle et exige que les colonnes de l’opérande de gauche correspondent aux lignes de l’opérande de droite.

m1 <- matrix(1:4, nrow = 2)
m2 <- matrix(5:8, nrow = 2)

m1 + m2          # element by element addition
m1 * m2          # element by element product, NOT matrix multiplication
m1 %*% m2        # true matrix multiplication
t(m1)            # transpose: rows become columns
solve(m1)        # inverse, for a square matrix that is not singular

rowSums(m1)      # one total per row
colMeans(m1)     # one mean per column
apply(m1, 1, max)   # any function, applied row by row
  • t(m): Transpose la matrice, donc l'élément [i, j] devient [j, i]. Les noms de dimensions sont conservés.
  • résoudre(m): Renvoie l'inverse d'une matrice carrée non singulière, et solve(a, b) résout un système linéaire.
  • Sommes des lignes / Sommes des colonnes / Moyennes des lignes / Moyennes des colonnes: Documenté comme équivalent à apply() avec sum ou mean, mais beaucoup plus rapide.
  • appliquer(m, MARGE, FUN): MARGIN = 1 parcourt les lignes et MARGIN = 2 parcourt les colonnes, pour toute fonction que vous fournissez.
  • diagnostic, détection, analyse croisée: Diagonale, déterminant et la forme plus rapide de t(x) %*% y.

Comme ces opérations sont vectorisées, elles remplacent les boucles au lieu de s'y imbriquer. Un résumé qui nécessiterait une boucle imbriquée sur des milliers de cellules se réduit à un simple appel à la fonction colMeans(), ce qui est crucial dès que le volume de données augmente.

Matrice vs DataFrame vs Tableau en R

Dans la console, les matrices, les data frames et les tableaux apparaissent tous rectangulaires, pourtant ils répondent à des questions différentes. Le tableau les présente côte à côte.

Propriétés Matrice Cadre de données tableau
Dimensions Exactement 2 Exactement 2 N'importe quel chiffre
Types de colonnes Un seul type pour l'objet entier Un type différent par colonne Un seul type pour l'objet entier
Construit avec matrice() data.frame() array ()
Utilisation typique Calcul numérique et algèbre linéaire Données observationnelles mixtes Tableaux empilés, tels que les décomptes par année
Étiquettes de ligne noms de dimensions optionnels Les noms de lignes sont toujours présents. noms de dimensions optionnels
# A matrix holds one type only, so mixing coerces everything to character
mixed <- matrix(c(1, 2, 'a', 'b'), nrow = 2)
class(mixed[1, 1])

# Convert between the structures
as.data.frame(matrix_c)
as.matrix(mtcars)

# A matrix is the two dimensional case of an array
is.matrix(matrix_c)
inherits(matrix_c, 'array')

Utilisez une matrice lorsque toutes les cellules contiennent le même type de nombre et que le travail consiste en des calculs arithmétiques. Utilisez une matrice lorsque toutes les cellules contiennent un nombre identique ... trame de données lorsque les colonnes contiennent des types différents, par exemple un nom de caractère à côté d'un prix numérique et d'un facteur. Tendez la main vers un liste Lorsque les éléments ont des longueurs différentes, et pour un tableau lorsqu'un troisième index, tel que le temps ou la région, existe réellement, la conversion dans les deux sens est peu coûteuse avec `as.matrix()` et `as.data.frame()`. Ainsi, la structure s'adapte à la tâche plutôt que l'inverse.

FAQ

R recycle les valeurs au lieu de les rejeter ; ainsi, la matrice `matrix(1:3, nrow = 2, ncol = 3)` répète la séquence. Un avertissement n'apparaît que si la longueur n'est pas un multiple exact du nombre de cellules, ce qui rend ce recyclage silencieux difficile à ignorer.

Utilisez un indice négatif : `m[-2, ]` supprime la deuxième ligne et `m[, -3]` supprime la troisième colonne. Plusieurs suppressions peuvent être effectuées simultanément avec `m[-c(1, 4), ]`. L’objet d’origine reste inchangé jusqu’à ce que vous lui réaffectiez le résultat.

La sélection d'une seule ligne ou colonne supprime par défaut la dimension vide. Ajoutez `drop = FALSE`, comme dans `m[1, , drop = FALSE]`, pour conserver une matrice à une seule ligne. Ceci est important lorsque le résultat est transmis à une fonction qui attend deux dimensions.

La fonction `which(m == value, arr.ind = TRUE)` renvoie un résultat sur deux colonnes indiquant la ligne et la colonne de chaque correspondance. Sans `arr.ind`, le résultat est un index linéaire unique parcourant les colonnes, ce qui est rarement souhaitable.

Utilisez `array(data, dim = c(rows, columns, layers))` ou affectez directement `dim(x)` à un vecteur. Le découpage prend alors un indice par dimension, par exemple `a[2, 3, 1]`. Une matrice est simplement le cas bidimensionnel d'un tableau.

Oui. La documentation de base de R indique que rowSums et colMeans sont équivalents à apply() avec sum ou mean, mais beaucoup plus rapides, et que les deux sont plus performants qu'une boucle for explicite car l'itération a lieu dans le code compilé plutôt que dans l'interpréteur.

L'ajustement du modèle relève de l'algèbre linéaire : les caractéristiques forment une matrice, les coefficients forment un vecteur et la prédiction est un simple produit %*%. machine learning Les packages nécessitent donc une matrice numérique plutôt qu'un cadre de données en entrée.

Oui. Copilote GitHub Fonctionne sous RStudio 2023.09.0 et versions ultérieures et complète le code à partir des commentaires du fichier ouvert. Consultez sa logique dimensionnelle dans RStudio, car une ligne incorrecte produit tout de même une matrice valide.

Résumez cet article avec :