web-dev-qa-db-fra.com

Compter le nombre d'objets dans la liste

Quelqu'un connaît une fonction R qui retournera le nombre d'éléments dans une liste?

92
Karl
155
Joey

Conseils pour R nouveaux arrivants comme moi: attention, voici une liste de n seul objet:

> mylist <- list (1:10)
> length (mylist)
[1] 1

Dans un tel cas, vous ne recherchez pas la longueur de la liste, mais de son premier élément:

> length (mylist[[1]])
[1] 10

Ceci est une "vraie" liste:

> mylist <- list(1:10, rnorm(25), letters[1:3])
> length (mylist)
[1] 3

De plus, il semble que R considère un data.frame comme une liste:

> df <- data.frame (matrix(0, ncol = 30, nrow = 2))
> typeof (df)
[1] "list"

Dans ce cas, vous pouvez être intéressé par ncol() et nrow() plutôt que par length():

> ncol (df)
[1] 30
> nrow (df)
[1] 2

Bien que length() fonctionne également (mais c'est une astuce quand votre data.frame n'a qu'une colonne):

> length (df)
[1] 30
> length (df[[1]])
[1] 2
74

J'ai passé des heures à essayer de comprendre cela, mais c'est simple! Vous pouvez utiliser length(·). length(mylist) vous indiquera le nombre d'objets que mylist contient.

... et vient de me rendre compte que quelqu'un avait déjà répondu à cette question - désolé!

11
anon

Créons une liste vide (non obligatoire, mais bon à savoir):

> mylist <- vector(mode="list")

Mettons quelques trucs dedans - 3 composants/indexes/balises (comme vous voulez l'appeler), chacun avec différentes quantités d'éléments:

> mylist <- list(record1=c(1:10),record2=c(1:5),record3=c(1:2))

Si vous ne souhaitez connaître que le nombre de composants d'une liste, utilisez:

> length(mylist)
[1] 3

Si vous êtes intéressé par la longueur des éléments dans un composant spécifique d'une liste, utilisez: (les deux font référence au même composant ici)

length(mylist[[1]])
[1] 10
length(mylist[["record1"]]
[1] 10

Si vous êtes intéressé par la longueur de tous les éléments de toutes les composantes de la liste, utilisez:

> sum(sapply(mylist,length))
[1] 17
9
Jeff Kraus

Vous pouvez également utiliser unlist(), ce qui est souvent utile pour gérer des listes:

> mylist <- list(A = c(1:3), B = c(4:6), C = c(7:9))

> mylist
$A
[1] 1 2 3

$B
[1] 4 5 6

$C
[1] 7 8 9

> unlist(mylist)
A1 A2 A3 B1 B2 B3 C1 C2 C3 
 1  2  3  4  5  6  7  8  9 

> length(unlist(mylist))
[1] 9

unlist () est un moyen simple d'exécuter d'autres fonctions sur des listes, telles que:

> sum(mylist)
Error in sum(mylist) : invalid 'type' (list) of argument

> sum(unlist(mylist))
[1] 45
6
user6062513