如何使用地图对列表进行子集化?

时间:2018-01-20 22:23:03

标签: r tidyverse purrr

我有以下列表:

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'))

从第一个元素中提取名称。但是如何从每个元素中提取name来获取此信息:

#[[1]]
#[1] "John"

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

更新:我刚才意识到我可以使用flatten(),但是如何使用带有正确索引的地图来实现呢?

2 个答案:

答案 0 :(得分:2)

您可以在此使用modify_depthpluckflattenpurrr

中的所有功能
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"

答案 1 :(得分:2)

mylist <- list(list(list(name = 'John'), list(name=c("Jack", "Kate"))))

library(purrr)

map(mylist[[1]], ~ .[[1]]) %>% 
  flatten_chr()

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

我认为你想要返回一个名字向量,而不是另一个名单。

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