51 votes

Comment créer une liste avec des noms mais sans entrées dans R/Splus ?

Je voudrais configurer une liste avec des entrées nommées dont les valeurs ne sont pas initialisées (je prévois d'y ajouter des choses plus tard). Comment les gens font-ils généralement cela ? Je l'ai fait :

mylist.names <- c("a", "b", "c")
mylist <- as.list(rep(NA, length(mylist.names)))
names(mylist) <- mylist.names

mais ça semble un peu bidon. Il doit y avoir un moyen plus standard de le faire... non ?

67voto

Thilo Points 5983

Je le ferais comme ça :

mylist.names <- c("a", "b", "c")
mylist <- vector("list", length(mylist.names))
names(mylist) <- mylist.names

38voto

Wojciech Sobala Points 2950

Une version un peu plus courte que celle de Thilo :)

mylist <- sapply(mylist.names,function(x) NULL)

9voto

Tommy Points 16323

Une autre façon délicate de le faire :

mylist.names <- c("a", "b", "c") 

mylist <- NULL
mylist[mylist.names] <- list(NULL)

Cela fonctionne parce que vous remplacez des entrées inexistantes, donc elles sont créées. La liste(NULL) est malheureusement nécessaire, puisque NULL signifie REMOVE une entrée :

x <- list(a=1:2, b=2:3, c=3:4)
x["a"] <- NULL # removes the "a" entry!
x["c"] <- list(NULL) # assigns NULL to "c" entry

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X