【问题标题】:Set names of a newly created nested list with purrr使用 purrr 设置新创建的嵌套列表的名称
【发布时间】:2019-01-14 17:14:35
【问题描述】:

我正在尝试创建一个命名嵌套列表,例如:

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

我使用purrr::map2创建了嵌套列表结构:

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

但是,我如何用 purrr 命名列表?

注意:从 question 我尝试了以下内容,但它并没有达到我想要的效果:

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

【问题讨论】:

  • 你不需要mapc("Abbie", "Benjamin") %>% set_names(., seq_along(.)) %>% as.list

标签: r purrr


【解决方案1】:

这是另一种创建嵌套列表的方法

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"

【讨论】:

    【解决方案2】:

    再使用一个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"
    

    【讨论】:

      【解决方案3】:

      我会使用 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"
      

      【讨论】:

        猜你喜欢
        • 2020-01-25
        • 2018-04-05
        • 1970-01-01
        • 2019-09-30
        • 2022-11-12
        • 2018-06-29
        • 1970-01-01
        • 2017-02-20
        • 2022-08-09
        相关资源
        最近更新 更多