Задайте имена вновь созданного вложенного списка с помощью purrr

Я пытаюсь создать именованный вложенный список, например:

list(
  list(id = 1, name = "Abbie"), 
  list(id = 2, name = "Benjamin")
  # ... more list statements here
)

Я создал структуру вложенного списка, используя purrr::map2:

c("Abbie", "Benjamin") %>% 
  map2(seq(.), ., list) 

Однако как мне тогда назвать список мурлыканьем?

Примечание. Из этого вопроса я экспериментировал со следующим, что не делает то, что я я ищу:

c("Abbie", "Benjamin") %>% 
  map2(seq(.), ., list) %>% 
  set_names(paste0("ID", seq(.)))

person Blue Otter Hat    schedule 14.01.2019    source источник
comment
Вам не нужно map c("Abbie", "Benjamin") %>% set_names(., seq_along(.)) %>% as.list   -  person akrun    schedule 14.01.2019


Ответы (3)


Используйте еще один map(), потому что имена, которые вы хотите установить, являются внутренними списками. Если нет, set_names() установит имена внешних списков.

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"
person Darren Tsai    schedule 14.01.2019

Вот еще один способ создать вложенный список

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"
person akrun    schedule 14.01.2019

Я бы сделал это так, используя 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"
person Moody_Mudskipper    schedule 15.01.2019