3 Matrices et listes
Ce chapitre s’appuie sur les sections 2.2.1.4 Matrices et 2.2.1.5 Listes du chapitre 2 des notes de cours, ainsi que sur la Section 2.4 Manipulation des données.
3.1 Matrice
En R, les matrices sont des vecteurs auxquels un attridut dim
de dimension est ajouté (cet attribut est de longueur 2). La fonction matrix()
permet de créer une matrice. Son premier argument, data
reçoit un vecteur de valeurs. Les arguments ncol
et nrow
reçoivent quant à eux le nombre de colonnes et de lignes, respectivement. Il est possible de ne préciser qu’un seul de ces deux derniers arguments (en fonction de la longueur du vecteur donné à l’argument data
, R devine).
Créons la matrice suivante en R:
\[A = \begin{bmatrix}1 & 4 & 7 & 10\\2 & 5 & 8 & 11\\ 3 & 6 & 9 & 12\end{bmatrix}\]
<- matrix(data = c(1,2,3,4,5,6, 7, 8, 9, 10, 11, 12), ncol = 4)
A A
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
Notes
- Le remplissage de la matrice s’est effectué colonne par colonne, de sorte à avoir 4 colonnes dans le résultat final (
ncol=4{.R}
). - Les données fourniées à l’argument
data
doivent être de même type (puisqu’elles sont contenues dans un vecteur). - Nous pouvons ne pas écrire
data=
et simplement écrirematrix(c(1,2,3,4,5,6,7,8,9,10,11,12), ncol = 4)
. - Au lieu d’écrire
c(1,2,3,4,5,6,7,8,9,10,11,12)
, il est possible de générer la même séquence de nombres à l’aide d’une syntaxe plus courte :seq(1,12)
ou encore plus court :1:12
.
Pour remplir la matrice en procédant ligne par ligne plutôt que colonne par colonne, on peut ajouter byrow = TRUE
en argument à la fonction matrix()
matrix(1:12, ncol = 4, byrow = TRUE)
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
3.1.1 Accès aux éléments d’une matrice
3.1.1.1 Indexation par position
Avec les vecteurs, nous avons extrait des sous-ensembles à l’aide de la fonction crochet, en utilisant l’indexation. Les vecteurs étant des objets en dimension 1, nous n’avons donné à la fonction crochet qu’un seul argument : x[c(2,3)]
permet d’extraire les éléments aux positions 2 et 3 de x
. Les matrices étant des objets à deux dimensions, il convient de fournir deux arguments à la fonction crochet, en les séparant par une virgule : x[i,j]
. Le premier argument, i
correspond aux indices de la première dimension (les lignes) et j
aux indices de la deuxième dimension (les colonnes).
Revenons à notre matrice A
. Extrayons les observations des lignes 1 et 3 aux colonnes 2 et 4 :
c(1,3), c(2,4)] A[
## [,1] [,2]
## [1,] 4 10
## [2,] 6 12
En ommettant l’argument i
ou l’argument j
, l’ensemble des lignes ou des colonnes respectivement est retourné.
Les éléments de l’ensemble des lignes aux colonnes 2 et 4 :
c(2,4)] A[,
## [,1] [,2]
## [1,] 4 10
## [2,] 5 11
## [3,] 6 12
Les éléments des lignes 1 et 3 pour l’ensemble des colonnes :
c(1,3), ] A[
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 3 6 9 12
Pour exclure des éléments, comme pour les vecteurs, on utilise le symbole moins (-
). Par exemple, pour extraire les éléments pour toutes les lignes, pour toutes les colonnes sauf la 2e et la 4e :
-c(2,4)] A[,
## [,1] [,2]
## [1,] 1 7
## [2,] 2 8
## [3,] 3 9
Note
Rappelez-vous que les matrices sont stockés sous forme de vecteurs. Il est donc possible d’utiliser la fonction crochet en lui fournissant uniquement l’argument i
. L’instruction suivante retourne, sous la forme d’un vecteur, les éléments aux positions 1, 4, et 3 :
c(1,4,3)] A[
## [1] 1 4 3
Exercice
- Créez la matrice suivante : \[B = \begin{bmatrix}-2 & 2 & -3 \\ -1 & 1 & 3\\4 & 0 & -1\end{bmatrix}.\]
- Extrayez la 2e colonne de la matrice B.
- Extrayez la sous-matrice dans le coin inférieur de B : \[C=\begin{bmatrix}1 & 3 \\ 0 & -1\end{bmatrix}.\]
- Extrayez toutes les colonnes de B sauf la 2e.
- Extrayez le terme en dernière ligne et en dernière colonne de B.
3.1.1.2 Indexation par condition
Comme pour les vecteur, nous pouvons utiliser une matrice de logique indiquant si les éléments doivent être retournés (TRUE
) ou non(FALSE
).
<- matrix(c(TRUE, FALSE, FALSE, FALSE, TRUE, FALSE,
masque TRUE, TRUE, FALSE, FALSE, FALSE, FALSE), ncol = 4)
masque
## [,1] [,2] [,3] [,4]
## [1,] TRUE FALSE TRUE FALSE
## [2,] FALSE TRUE TRUE FALSE
## [3,] FALSE FALSE FALSE FALSE
En appliquant ce masque de valeurs logiques à la matrice A, on récpuère dans un vecteur les valeurs pour lesquelles la valeur dans le masque à la même position vaut TRUE
:
A[masque]
## [1] 1 5 7 8
Evidemment, écrire de tels masques à la main n’est pas très utile. En revanche, ils peuvent être obtenus suite à l’évaluation d’une condition logique. Par exemple, si on souhaite obtenir les éléments de la matrice A dont la valeur est inférieure à 5, on peut créer le masque suivant :
<5 A
## [,1] [,2] [,3] [,4]
## [1,] TRUE TRUE FALSE FALSE
## [2,] TRUE FALSE FALSE FALSE
## [3,] TRUE FALSE FALSE FALSE
Et ensuite appliquer ce masque avec la fonction crochet :
<5] A[A
## [1] 1 2 3 4
Exercice
- Récupérez les valeurs de la matrice A qui sont inférieures à 3 ou supérieures à 7.
- Récupérez les valeurs paires de la matrice A (utilisez le modulo).
3.1.2 Remplacement et ajout de valeurs
Comme pour les vecteurs, le remplacement de valeurs peut s’effectuer avec la flèche d’affectation <-
. On écrit à gauche de cette flèche l’extraction réalisée par indexation et à droite les valeurs de remplacement.
Reprenons notre matrice A :
\[A = \begin{bmatrix}1 & 4 & 7 & 10\\2 & 5 & 8 & 11\\ 3 & 6 & 9 & 12\end{bmatrix}\]
<- matrix(1:12, ncol = 4)
A A
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
Remplaçons les valeurs 10 et 11 par -10 et -11
c(1,2),4] <- c(-10, -11)
A[ A
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 -10
## [2,] 2 5 8 -11
## [3,] 3 6 9 12
Cela fonctionne aussi avec un indexation par condition. Créons un masque indiquant si les valeurs sont négatives :
<0 A
## [,1] [,2] [,3] [,4]
## [1,] FALSE FALSE FALSE TRUE
## [2,] FALSE FALSE FALSE TRUE
## [3,] FALSE FALSE FALSE FALSE
Puis affectons la valeur NA
à la place des valeurs négatives de la matrice A
:
<0] <- NA
A[A A
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 NA
## [2,] 2 5 8 NA
## [3,] 3 6 9 12
Exercice
- Créez la matrice suivante : \[X = \begin{bmatrix}-2 & 2 & -3 \\ -1 & 1 & 3\\4 & 0 & -1\end{bmatrix}.\]
- Remplacez les valeurs positives de
X
par 1000. - Remplacez les éléments aux positions (1,1) et (2,3) par
NA
.
3.1.3 Calculs matriciels
En économie, et particulièrement en économétrie, nous manipulons beaucoup de matrices. Il est important de savoir effectuer avec R les différents calculs matriciels les plus courants dans notre discipline.
Considérons quelques matrices :
\[A = \begin{bmatrix}1 & 2 & 0\\ 4 & 3 & -1\end{bmatrix}\]
\[B = \begin{bmatrix}5 & 1\\ 2 & 3\\ 3 & 4\end{bmatrix}\]
\[C = \begin{bmatrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{bmatrix}\]
\[D = \begin{bmatrix}-2 & 2 & -3 \\ -1 & 1 & 3\\4 & 0 & -1\end{bmatrix}\]
<- matrix(c(1,4,2,3,0,-1), nrow = 2)
A <- matrix(c(5,2,3, 1,3,4), ncol = 2)
B <- matrix(c(1,0,0,0,1,0,0,0,1), ncol = 3)
C <- matrix(c(-2,-1,4,2,1,0,-3,3,-1), ncol = 3) D
Considérons par ailleurs le scalaire \(a = 3\).
<- 3 a
3.1.3.1 Addition, soustraction
Pour additionner ou soustraire un scalaire ou une matrice à une matrice, on utilise simplement les opérateurs d’addition (+
) ou de soustraction (-
), respectivement :
+a A
## [,1] [,2] [,3]
## [1,] 4 5 3
## [2,] 7 6 2
-a A
## [,1] [,2] [,3]
## [1,] -2 -1 -3
## [2,] 1 0 -4
+D C
## [,1] [,2] [,3]
## [1,] -1 2 -3
## [2,] -1 2 3
## [3,] 4 0 0
-D C
## [,1] [,2] [,3]
## [1,] 3 -2 3
## [2,] 1 0 -3
## [3,] -4 0 2
Lorsqu’on essaie d’additionner ou de soustraire deux matrices non compatibles, R retourne une erreur :
+C A
## Error in A + C: tableaux de tailles inadéquates
3.1.3.2 Multiplication
La multiplication par un scalaire s’effectue avec l’étoile *
:
*a A
## [,1] [,2] [,3]
## [1,] 3 6 0
## [2,] 12 9 -3
Pour multiplier deux matrices (compatibles) entre-elles, on utilise l’opérateur de produit matriciel %*%
:
%*% B A
## [,1] [,2]
## [1,] 9 7
## [2,] 23 9
En cas d’incompatibilité, R nous prévient :
%*% A C
## Error in C %*% A: arguments inadéquats
Attention, si on utilise l’étoile au lieu de l’opérateur de produit matriciel, si les deux matrices ont la même dimension, alors R effectue une multiplication terme à terme :
* D C
## [,1] [,2] [,3]
## [1,] -2 0 0
## [2,] 0 1 0
## [3,] 0 0 -1
3.1.3.3 Transposée
La transposée d’une matrice s’obtient en R avec la fonction t()
:
t(A)
## [,1] [,2]
## [1,] 1 4
## [2,] 2 3
## [3,] 0 -1
3.1.3.4 Inversion
L’inversion d’une matrice est calculée à l’aide de la fonction solve()
:
solve(D)
## [,1] [,2] [,3]
## [1,] -0.02777778 0.05555556 0.25
## [2,] 0.30555556 0.38888889 0.25
## [3,] -0.11111111 0.22222222 0.00
En économétrie, l’estimateur des moindres carrés ordinaires est donné par \((X^{\top}X)^{-1}(X^{\top}y)\), où \(X\) est la matrice des variables explicatives et \(y\) le vecteur de la variable endogène.
solve(t(X) %*% X) %*% (t(X) %*% y)
Qui peut aussi se calculer de manière équivalente (nous le ferons dans un prochain exercice) :
crossprod(X,X) %*% crossprod(X,y)
3.1.3.6 Diagonale
La diagonale d’une matrice peut être obtenue avec la fonction det()
{.R :
diag(C)
## [1] 1 1 1
Note
La fonction diag()
permet par ailleurs de créer une matrice identité :
diag(3)
## [,1] [,2] [,3]
## [1,] 1 0 0
## [2,] 0 1 0
## [3,] 0 0 1
Pour obtenir la trace d’une matrice carrée, on peut simplement sommer les éléments de la diagonale :
sum(diag(D))
## [1] -2
3.1.4 Combiner des matrices
Pour ajouter des colonnes à une matrice, la fonction cbind()
peut être utilisée. Il s’agit de combiner (bind) les colonnes (columns) de deux matrices ou d’une matrice et d’un vecteur colonne.
cbind(B, C)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 5 1 1 0 0
## [2,] 2 3 0 1 0
## [3,] 3 4 0 0 1
cbind(B, c(10,11,12))
## [,1] [,2] [,3]
## [1,] 5 1 10
## [2,] 2 3 11
## [3,] 3 4 12
Pour ajouter des lignes à une matrice, la fonction rbind()
peut être utilisée. Il s’agit de combiner (bind) les lignes (rows) de deux matrices ou d’une matrice et d’un vecteur ligne.
rbind(C, D)
## [,1] [,2] [,3]
## [1,] 1 0 0
## [2,] 0 1 0
## [3,] 0 0 1
## [4,] -2 2 -3
## [5,] -1 1 3
## [6,] 4 0 -1
rbind(C, c(10,11,12))
## [,1] [,2] [,3]
## [1,] 1 0 0
## [2,] 0 1 0
## [3,] 0 0 1
## [4,] 10 11 12
Note
Si on ajoute un vecteur colonne (ligne) à une matrice, et que la taille du vecteur est inférieure au nombre de colonnes (lignes), R effectue ce que l’on appelle un recyclage. C’est-à-dire que R va compléter le vecteur plus court à l’aide des valeurs de ce même vecteur, en repartant au début de celui-ci, afin d’obtenir deux objets de même taille.
cbind(B, c(10, 11))
## [,1] [,2] [,3]
## [1,] 5 1 10
## [2,] 2 3 11
## [3,] 3 4 10
Exercice
Dans cet exercice, nous allons considérer un modèle de régression linéaire.
\[y_i = \beta_0 + \sum_{j=1}^{p} \beta_j x_{p,i} + \varepsilon_i,\]
avec \(i=1,\ldots, n\) indiçant les individus statistiques, \(y\) la variable à expliquer, \(\beta_0\) le coefficient de la constante, \(\beta_j\) le coefficient associé à la variable explicative \(x_j\) (avec \(j=1, \ldots, p\)), et \(\epsilon\) un terme d’erreur distribué normalement avec une espérance nulle et une variance \(\sigma^2\).
L’écriture matricielle du modèle est la suivante :
\[y = \boldsymbol{X} \beta + \varepsilon,\] avec \(y\) le vecteur de la variable à expliquer, \(\boldsymbol X\) la matrice contenant les variables explicatives (et la constante), et \(\varepsilon\) le terme d’erreur.
Dans cet exercice, vous allez utiliser vos connaissances acquises sur les matrices pour estimer les coefficients du modèle par la méthode des moindres carrés ordinaires.
Considérons le modèle suivant, pour les observations \(i=1,\ldots, n\) :
\[\textrm{consommation}_i = \beta_0 + \beta_1 \textrm{puissance}_i + \beta_2 \textrm{masse}_i + \varepsilon_i,\] où \(\textrm{consommation}\) est la variables à expliquer (\(y\)). Il s’agit d’un vecteur de valeurs de consommation de carburant (miles par gallons). \(\textrm{puissance}\) et \(\textrm{masse}\) sont des vecteurs de puissance (nombre de chevaux) et de masse du véhicule (en millième de livres) respectivement. Le vecteur \(\varepsilon\) est un terme d’erreurs que l’on suppose distribué selon une normale d’espérance nulle.
L’objectif de l’exercice est d’estimer les paramètres \(\beta_0\), \(\beta_1\) et \(\beta_2\).
Dans un premier temps, évaluez les instructions suivantes pour récupérer les valeurs (qui sont stockées dans un tableau de données nommé mtcars
qui est fourni dans le package {datasets}).
<- mtcars$mpg
consommation <- mtcars$hp
puissance <- mtcars$wt masse
Créez également un vecteur pour la constante (ce vecteur ne contient que des 1) :
<- rep(1, nrow(mtcars)) constante
- Créez la matrice
X
qui doit contenir 3 colonnes : une pour la constante (constante
), une autre pour la puissance (puissance
) et une dernière pour la masse (masse
) ; - Calculez la transposée de \(X\) : \(X^\top\) ;
- Calculez le produit matriciel : \(X^\top X\) ;
- Calculez l’inverse de ce produit matriciel : \((X^\top X)^{-1}\) ;
- Calculez le produit matriciel \(X^\top y\);
- Donnez les estimations des paramètres : \((X^\top X)^{-1} X^\top y\).
3.2 Listes
Tandis que les éléments d’un vecteur ou d’une matrice doivent nécessairement être de même type, les listes proposent une structure de données moins rigide à cet égard. Les types des élément d’une liste en R peuvent être différents.
<- list(c(10,12,15), c("Janvier", "Fevrier"))
l_1 l_1
## [[1]]
## [1] 10 12 15
##
## [[2]]
## [1] "Janvier" "Fevrier"
Les classes d’objets à l’intérieur d’une liste ne sont pas non plus nécessairement identiques. Dans l’exemple qui suit, la liste l_2
contient un vecteur de numériques en premier élément, et une matrice de numériques en second :
<- list(c(1,2,3), matrix(c(1,2,3,4), ncol = 2))
l_2 l_2
## [[1]]
## [1] 1 2 3
##
## [[2]]
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
Les éléments peuvent être, comme dans un vecteur, nommés. Les noms peuvent être indiqués au moment de la création…
<- list(notes = c(10,12,5), mois = c("Janvier", "Fevrier"))
l_1 l_1
## $notes
## [1] 10 12 5
##
## $mois
## [1] "Janvier" "Fevrier"
… ou une fois la liste créée, à l’aide de la fonction names()
:
<- list(c(10,12,5), c("Janvier", "Fevrier"))
l_1 names(l_1) <- c("notes", "mois")
l_1
## $notes
## [1] 10 12 5
##
## $mois
## [1] "Janvier" "Fevrier"
3.2.1 Accès aux éléments
Comme pour les vecteurs, il est possible d’utiliser les crochets pour extraire des éléments d’une liste. La fonction crochet appliquée à une liste retourne une liste. On donne en arguments de cette fonction, comme pour les vecteurs, soit des positions, soit des noms, soit des valeurs logiques.
Créons une liste contenant 4 éléments :
<- list(nombres = 1:5, alphabet_min = letters,
l_3 alphabet_maj = LETTERS, mois = month.name)
l_3
## $nombres
## [1] 1 2 3 4 5
##
## $alphabet_min
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
##
## $alphabet_maj
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X" "Y" "Z"
##
## $mois
## [1] "January" "February" "March" "April" "May" "June"
## [7] "July" "August" "September" "October" "November" "December"
Note
Il existe 5 constantes intégrées en R :
LETTERS
: les 26 lettres de l’alphabet occidental, en majuscules ;letters
: les 26 lettres de l’alphabet occidental, en minuscules ;month
: les noms des 12 mois de l’année du calendrier grégorien ;month.abb
: les abbréviations en 3 lettres des 12 mois du calendrier grégorien ;pi
: le ratio de la circonférence d’un cercle sur son diamiètre (\(pi\)).
L’indexation par position fonctionne comme pour un vecteur :
1] l_3[
## $nombres
## [1] 1 2 3 4 5
c(1,3)] l_3[
## $nombres
## [1] 1 2 3 4 5
##
## $alphabet_maj
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X" "Y" "Z"
-c(2,3)] l_3[
## $nombres
## [1] 1 2 3 4 5
##
## $mois
## [1] "January" "February" "March" "April" "May" "June"
## [7] "July" "August" "September" "October" "November" "December"
L’indexation par nom fonctionne aussi comme pour les vecteurs :
c("mois", "nombres")] l_3[
## $mois
## [1] "January" "February" "March" "April" "May" "June"
## [7] "July" "August" "September" "October" "November" "December"
##
## $nombres
## [1] 1 2 3 4 5
Il en est de même pour l’indexation par condition :
c(TRUE, FALSE, FALSE, TRUE)] l_3[
## $nombres
## [1] 1 2 3 4 5
##
## $mois
## [1] "January" "February" "March" "April" "May" "June"
## [7] "July" "August" "September" "October" "November" "December"
Note
Nous verrons lors de la séance de travaux dirigés sur les boucles comment parcourir les éléments d’une liste tout en appliquant un test logique à chaque élément.
On note bien que le résultat retourné est une liste :
class(l_3[1])
## [1] "list"
class(l_3[c(1,3)])
## [1] "list"
class(l_3["nombres"])
## [1] "list"
Si l’on souhaite accéder au contenu d’un élément particulier, il faut utiliser la fonction double crochets ("[["()
). De manière analogue à la fonction crochets ("["()
), une syntaxe allégée est proposée.
1]] l_3[[
## [1] 1 2 3 4 5
Le résultat retourné est bien le contenu, ici un vecteur d’entiers :
class(l_3[[1]])
## [1] "integer"
La fonction str()
, qui affiche la structure d’un objet de manière compacte, permet de mieux se fixer les idées :
str(l_3[1])
## List of 1
## $ nombres: int [1:5] 1 2 3 4 5
str(l_3[[1]])
## int [1:5] 1 2 3 4 5
Note
Lorsque les éléments de la liste son nommés et que l’on désire extraire le contenu d’un seul élément, il est possible d’utiliser le dollar en lieu et place des crochets, en indiquant le nom de l’élément.
$nombres l_3
Créons une liste comprenant trois éléments, dont le 3e est une liste de deux éléments :
<-
l_4 list(c(1,2,3),
c("Bonjour", "Hello"),
list(c(1,2,3), month.name))
l_4
## [[1]]
## [1] 1 2 3
##
## [[2]]
## [1] "Bonjour" "Hello"
##
## [[3]]
## [[3]][[1]]
## [1] 1 2 3
##
## [[3]][[2]]
## [1] "January" "February" "March" "April" "May" "June"
## [7] "July" "August" "September" "October" "November" "December"
Si on souhaite extraire le premier élément du troisième élément de l_4
, on utilise dans un premier temps les doubles crochets (pour extraire le contenu du 3e élément de l_4
), puis on utilise la fonction crochet sur le résultat (pour extraire le premier élément). Il s’agit d’une composition de fonctions, et la fonction appliquée en dernier étant la fonction crochet, le résultat est… une liste !
3]][1] l_4[[
## [[1]]
## [1] 1 2 3
Si l’on souhaite extraire le contenu du 1er élément du 3e élément de l_4
, on utilisera deux fois la fonction double crochets : la première pour extraire le contenu du 3e élément (on récupère l’objet en 3e position, qui est une liste) puis la seconde pour extraire le contenu du premier élément de ce que l’on vient d’extraire :
3]][[1]] l_4[[
## [1] 1 2 3
3.2.2 Remplacement et ajout d’éléments
Pour remplacer un élément dans une liste, comme pour un vecteur ou une matrice, on utilise une nouvelle affectation.
"nombres"]] <- c(6,5,4,3,2,1,0)
l_3[[$mois <- c("January", "February")
l_3 l_3
## $nombres
## [1] 6 5 4 3 2 1 0
##
## $alphabet_min
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
##
## $alphabet_maj
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X" "Y" "Z"
##
## $mois
## [1] "January" "February"
Pour ajouter un élément, on effectue simplement une affectation. Soit on nomme le nouvel élément :
"autres_nombres"] <- c(1,2,3)
l_3[ l_3
## $nombres
## [1] 6 5 4 3 2 1 0
##
## $alphabet_min
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
##
## $alphabet_maj
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X" "Y" "Z"
##
## $mois
## [1] "January" "February"
##
## $autres_nombres
## [1] 1
Si l’élément n’as pas vocation à être nommé, on utilise la fonction c()
et on place le nouvel élément au sein d’une liste :
<- c(l_3, list(c(4,5,6)))
l_3 l_3
## $nombres
## [1] 6 5 4 3 2 1 0
##
## $alphabet_min
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
##
## $alphabet_maj
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X" "Y" "Z"
##
## $mois
## [1] "January" "February"
##
## $autres_nombres
## [1] 1
##
## [[6]]
## [1] 4 5 6
Exercice
Extrayez le 3e élément de la liste suivante :
<- list(rnorm(10), LETTERS[1:26], month.abb) ma_liste
Extrayez tous les éléments de la liste
ma_liste
sauf le second.Extrayez le contenu du troisième élément de la liste
ma_liste_2
, en utilisant le nom de l’élément.<- list(nombre = rnorm(10), ma_liste_2 lettre = LETTERS[1:26], mois = month.abb)
Toujours en accédant par le nom, ajoutez
10
à chacune des valeurs du premier élément dema_liste_2
. Le résultat doit altérerma_liste_2
.Ajouter un élément au vecteur de nombres de l’élément
nombre
de la listema_liste_2
. Cet élément doit être le numérique-10
.