require(purrr)
list <- list(
node = list(a = list(y = 1, t = 1), b = list(y = 1, t = 2)),
node = list(a = list(y = 1, t = 3), b = list(y = 1, t = 4)))
如何用purrr选择所有“t”值?
答案 0 :(得分:4)
如果您知道要从中提取信息的级别,可以使用modify_depth
。
您希望将t
拉出嵌套列表,即级别2。
modify_depth(list, 2, "t")
$node
$node$a
[1] 1
$node$b
[1] 2
$node
$node$a
[1] 3
$node$b
[1] 4
purrr modify
系列函数返回与输入相同类型的对象,因此您需要unlist
来获取向量而不是列表
答案 1 :(得分:3)
以下是使用purrr
中的函数的一些想法。感谢@cderv的伟大建议。
这是第一个。 pluck
的使用类似于$
。
list %>% flatten() %>% transpose() %>% pluck("t")
$a
[1] 1
$b
[1] 2
$a
[1] 3
$b
[1] 4
这是第二个。
list %>% flatten() %>% map("t")
$a
[1] 1
$b
[1] 2
$a
[1] 3
$b
[1] 4
最后,如果我们想要一个向量,如果我们知道map_dbl
中的元素都是数字,我们可以使用t
。
list %>% flatten() %>% map_dbl("t")
a b a b
1 2 3 4
答案 2 :(得分:1)
使用purrr::map
map(list, ~map(.x, ~.x$t))
输出仍是列表清单
$node
$node$a
[1] 1
$node$b
[1] 2
$node
$node$a
[1] 3
$node$b
[1] 4
unlist
转换为矢量
unlist(map(list, ~map(.x, ~.x$t)))
输出
node.a node.b node.a node.b
1 2 3 4