2
votes

Définir les noms d'une liste imbriquée nouvellement créée avec purrr

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
)


1 commentaires

Vous n'avez pas besoin de map c ("Abbie", "Benjamin")%>% set_names (., Seq_along (.))%>% As.list


3 Réponses :


2
votes

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"


0 commentaires

3
votes

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"


0 commentaires

0
votes

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"


0 commentaires