Lors de vos analyses statistiques, vous risquez d’être confronté à la gestion de plusieurs données de types différents et potentiellement de longueurs différentes. Bien entendu, vous pourriez stocker tous ces éléments dans autant de vecteurs/variables/facteurs en fonction de vos besoins. Mais ne serait-il pas plus pratique d’avoir un seul objet permettant de stocker tous ces différents objets ? C’est ce à quoi correspondent les listes.
Une liste est un ensemble ordonné d’objets qui n’ont pas toujours le même mode ou la même longueur. Les différents objets sont appelés des composantes et peuvent être associés à un nom spécifique (un peu comme une variable). Les listes ont les deux attributs des vecteurs (length et mode) et l’attribut supplémentaire names. Les listes sont des objets indispensables, car toutes les fonctions qui retournent plusieurs objets le font sous la forme d’une liste.
Création de listes
La fonction de base pour créer une liste est la fonction list
:
maliste <- list(c("A","B","C","A"),matrix(1:4,2,2))
maliste
# [[1]]
# [1] "A" "B" "C" "A"
# [[2]]
# [,1] [,2]
# [1,] 1 3
# [2,] 2 4
Cette liste contient bien 2 objets et c’est bien une liste, comme nous pouvons le voir ci-dessous :
length(maliste)
# [1] 2
mode(maliste)
# [1] "list"
is.list(maliste)
# [1] TRUE
Comme dit plus tôt, vous pouvez nommer les composantes de la liste, c’est-à-dire associer un nom à chaque objet de la liste pour pouvoir y accéder plus facilement via l’opérateur $
. Ceci est faisable via la fonction names
:
names(maliste) # pas de nom actuellement, la fonction retourne un NULL
# NULL
names(maliste) <- c("vec","mat")
names(maliste)
# [1] "vec" "mat"
Il est également possible de créer une liste en partant d’une liste vide.
li <- list()
li
# list()
li[[1]] <- 1:4
li
# [[1]]
# [1] 1 2 3 4
li$nouv <- matrix(1:4,nrow=2)
li
# [[1]]
# [1] 1 2 3 4
# $nouv
# [,1] [,2]
# [1,] 1 3
# [2,] 2 4
Comme la première composante n’a pas de nom, on retrouve [[1]]
dans l’affichage de la liste puis la composante nouv
.
names(li)
# [1] "" "nouv"
et les attributs de cette liste sont les noms.
Fonctions utiles applicables sur des listes
Comme les objets d’une liste n’ont pas forcément le même type, il n’est pas possible de faire des calculs entre plusieurs listes. Néanmoins, il existe quelques fonctions valides et utiles :
lapply
applique une fonction (comme la moyenne, la variance, etc.) successivement à chacune des composantes.unlist(maliste)
crée un seul vecteur contenant tous les éléments de la liste. Les éléments d’un vecteur étant nécessairement du même mode, il faut faire attention à la conversion automatique pratiquée par R.c(liste1,liste2)
concatène deux listes.
En résumé
Une liste est un ensemble ordonné d’objets qui n’ont pas toujours le même mode ou la même longueur.
Il est possible d’associer un nom à un objet spécifique de la liste.
Plusieurs fonctions permettent d’effectuer une action sur chaque élément d’une liste.
Dans le prochain chapitre, nous verrons un peu plus en détails comment utiliser un des objets phare du langage R : les dataframes.