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
mapc ("Abbie", "Benjamin")%>% set_names (., Seq_along (.))%>% As.list