Pour extraire une composante de la liste, on peut toujours le faire en indiquant la position de l’élément que l’on souhaite extraire.
Sélection par position
Les [[ ]]
permettent de retourner l’élément de la liste.
Il faut faire la distinction entre :
maliste[1]
qui retourne une sous-liste composée de l’élément 1 de la liste initiale.length(maliste[1])
vaut donc 1.maliste[[1]]
qui retourne l’objet R qui compose l’élément 1 de la liste.length(maliste[[1]])
retourne la longueur de l’objet stocké en premier dans la listemaliste
.
Commençons par créer une liste de 4 éléments.
x <- c("a","a","b","c")
X <- matrix(1:8,ncol=4)
y <- c(T,T,T,F,F)
z <- matrix(c("A","B","C","D"),ncol=2)
maliste <- list(comp1=x,comp2=X,comp3=y,element4=z)
maliste
# $comp1
# [1] "a" "a" "b" "c"
#
# $comp2
# [,1] [,2] [,3] [,4]
# [1,] 1 3 5 7
# [2,] 2 4 6 8
#
# $comp3
# [1] TRUE TRUE TRUE FALSE FALSE
#
# $element4
# [,1] [,2]
# [1,] "A" "C"
# [2,] "B" "D"
Voyons à présent les différences notables entre la sélection avec l’opérateur [ ]
et celle avec l’opérateur [[ ]]
au sein de notre liste de 4 objets :
maliste[2] #retourne une liste
# $comp2
# [,1] [,2] [,3] [,4]
# [1,] 1 3 5 7
# [2,] 2 4 6 8
length(maliste[2])
# [1] 1
maliste[[2]] #extrait le second élément de la liste
# [,1] [,2] [,3] [,4]
# [1,] 1 3 5 7
# [2,] 2 4 6 8
length(maliste[[2]])
# [1] 8
# puisqu’il y a 8 éléments dans la composante 2 de maliste.
On peut aussi utiliser le nom de l’élément s’il existe.
Sélection par nom
Lorsque vous souhaitez sélectionner au sein d’une liste en utilisant directement le nom d’un des objets qu’elle contient, vous pouvez l’écrire de deux façons : soit de façon similaire à une sélection par position en précisant le nom entre quotes, soit via l’opérateur $
. Par exemple :
maliste["comp2"]
# $comp2
# [,1] [,2] [,3] [,4]
# [1,] 1 3 5 7
# [2,] 2 4 6 8
maliste[["comp2"]]
# [,1] [,2] [,3] [,4]
# [1,] 1 3 5 7
# [2,] 2 4 6 8
maliste$comp2
# [,1] [,2] [,3] [,4]
# [1,] 1 3 5 7
# [2,] 2 4 6 8
Il est possible d’extraire plusieurs éléments d’une même liste, ce qui crée une sous-liste. Noter qu’ici l’on utilise [ ]
et non [[ ]]
:
maliste[c(1,3)]
# $comp1
# [1] "a" "a" "b" "c"
#
# $comp3
# [1] TRUE TRUE TRUE FALSE FALSE
En résumé
Il existe différentes façons de sélectionner au sein d’une liste :
soit c’est une sélection par position. Cependant, il faut bien être vigilant à la différence entre une sélection via
[ ]
qui renverra une sous-liste de la liste originale et une sélection via[[ ]]
qui renverra l’objet stocké dans la liste à laquelle on essaie d’accéder ;soit c’est une sélection par nom, où l’on peut accéder à une sous-liste ou un objet spécifique en utilisant le nom qui y est associé au sein de la liste.
Dans le prochain chapitre, nous verrons un peu plus en détails comment sélectionner au sein d'un dataframe.