代码之家  ›  专栏  ›  技术社区  ›  Dambo

如何使用map对列表进行子集划分?

  •  2
  • Dambo  · 技术社区  · 7 年前

    我有以下清单:

    list(list(list(name = 'John'), list(name=c("Jack", "Kate"))))
    [[1]]
    [[1]][[1]]
    [[1]][[1]]$name
    [1] "John"
    
    
    [[1]][[2]]
    [[1]][[2]]$name
    [1] "Jack" "Kate"
    

    我想提取一份 name 只有我知道我可以用

    list(list(list(name = 'John'), list(name=c("Jack", "Kate"))))%>% map(list(1, 'name'))
    

    从第一个元素提取名称。但我如何提取 名称 从每个元素中获得:

    #[[1]]
    #[1] "John"
    
    #[[2]]
    #[1] "Jack" "Kate"
    

    更新 :我刚刚意识到我可以 flatten() ,但如何使用具有适当索引的映射来实现呢?

    2 回复  |  直到 7 年前
        1
  •  3
  •   markus    7 年前

    你可以使用 modify_depth , pluck flatten 这里,来自 purrr

    your_list <- list(list(list(name = 'John'), list(name=c("Jack", "Kate"))))
    
    library(purrr)
    modify_depth(your_list, .depth = 2, .f = pluck, "name") %>% 
     flatten()
    #[[1]]
    #[1] "John"
    
    #[[2]]
    #[1] "Jack" "Kate"
    
        2
  •  2
  •   Phil    7 年前
    mylist <- list(list(list(name = 'John'), list(name=c("Jack", "Kate"))))
    
    library(purrr)
    
    map(mylist[[1]], ~ .[[1]]) %>% 
      flatten_chr()
    
    # [1] "John" "Jack" "Kate"
    

    我假设您想要返回一个名称向量,而不是另一个列表。

    编辑:没关系,你想把它作为一个列表。