web-dev-qa-db-fra.com

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

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

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

mais cela semble un peu hacky. Il doit y avoir une façon plus standard de faire ça ... non?

41
lowndrul

Je le ferais comme ça:

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

Version un peu plus courte que Thilo :)

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

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 les entrées non existantes, elles sont donc créées. La liste (NULL) est malheureusement requise, car NULL signifie SUPPRIMER 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
9
Tommy