J'essaye de créer une liste imbriquée nommée, quelque chose comme:
c("Abbie", "Benjamin") %>% map2(seq(.), ., list) %>% set_names(paste0("ID", seq(.)))
J'ai créé la structure de liste imbriquée en utilisant purrr :: map2
: p >
c("Abbie", "Benjamin") %>% map2(seq(.), ., list)
Cependant, comment puis-je nommer la liste avec purrr?
Remarque: À partir de cette question , j'ai expérimenté ce qui suit, qui ne fait pas ce que je recherche:
list( list(id = 1, name = "Abbie"), list(id = 2, name = "Benjamin") # ... more list statements here )
3 Réponses :
Utilisez une autre map ()
car les noms que vous souhaitez définir sont les listes internes. Sinon, set_names ()
définira les noms des listes externes.
c("Abbie", "Benjamin") %>% map2(seq(.), ., list) %>% map(~ set_names(., c("ID", "Name"))) [[1]] [[1]]$ID [1] 1 [[1]]$Name [1] "Abbie" [[2]] [[2]]$ID [1] 2 [[2]]$Name [1] "Benjamin"
Voici une autre façon de créer la liste imbriquée
library(purrr) c("Abbie", "Benjamin") %>% list(id = seq_along(.), name =.) %>% transpose #[[1]] #[[1]]$id #[1] 1 #[[1]]$name #[1] "Abbie" #[[2]] #[[2]]$id #[1] 2 #[[2]]$name #[1] "Benjamin"
Je le ferais de cette façon en utilisant purr :: imap
:
library(purr) c("Abbie", "Benjamin") %>% imap(~list(id=.y,name=.x)) # [[1]] # [[1]]$id # [1] 1 # # [[1]]$name # [1] "Abbie" # # # [[2]] # [[2]]$id # [1] 2 # # [[2]]$name # [1] "Benjamin"
Vous n'avez pas besoin de
map
c ("Abbie", "Benjamin")%>% set_names (., Seq_along (.))%>% As.list