如何使用地图对列表进行子集化?
How to subset a list using map?
我有以下列表:
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"
UPDATE:我刚刚意识到我可以使用 flatten()
,但我如何使用具有适当索引的地图来实现它?
您可以在此处使用 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"
mylist <- list(list(list(name = 'John'), list(name=c("Jack", "Kate"))))
library(purrr)
map(mylist[[1]], ~ .[[1]]) %>%
flatten_chr()
# [1] "John" "Jack" "Kate"
我假设您想要 return 一个名称向量,而不是另一个列表。
编辑:没关系,您想将其保留为列表。
我有以下列表:
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"
UPDATE:我刚刚意识到我可以使用 flatten()
,但我如何使用具有适当索引的地图来实现它?
您可以在此处使用 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"
mylist <- list(list(list(name = 'John'), list(name=c("Jack", "Kate"))))
library(purrr)
map(mylist[[1]], ~ .[[1]]) %>%
flatten_chr()
# [1] "John" "Jack" "Kate"
我假设您想要 return 一个名称向量,而不是另一个列表。
编辑:没关系,您想将其保留为列表。