map()
通过使用purrr 包中的各种函数,您可以将整数或字符串传递给函数并从子列表中提取元素。这些工作正如我所期望的那样:
listy <- list(A = list("silence", "cats", X = list(Aa = "dogs", "birds")),
B = list("silence", "fish-head", Y = list(Bb = "fish-face", "squirrel")))
> str(listy)
List of 2
$ A:List of 3
..$ : chr "silence"
..$ : chr "cats"
..$ X:List of 2
.. ..$ Aa: chr "dogs"
.. ..$ : chr "birds"
$ B:List of 3
..$ : chr "silence"
..$ : chr "fish-head"
..$ Y:List of 2
.. ..$ Bb: chr "fish-face"
.. ..$ : chr "squirrel"
list1 <- listy %>% map(1) %>% str # returns "silence" from A and B
list2 <- listy %>% map(2) %>% str # returns "cats" and "fish-head"
list3 <- listy %>% map(c(3, 1)) %>% str # returns "dogs" and "fish-face" from the lists X and Y within the list.
我的问题是,如何从这个列表中提取多个元素?如果我想要 A 和 B 的“沉默”,以及 A 和 B 的“猫”和“鱼头”(换句话说,A 和 B 的元素 1 和 2),这可能map()
吗?如果没有,最好的方法是什么?
这是我认为可行的方法:
list4 <- listy %>% map(1, 2) %>% str
其中 1 指的是每个子列表中的第一个元素,而 2 指的是第二个元素。但这与list1
上面的返回相同。usingc(1, 2)
不起作用,因为它指的是嵌套结构(即[[1]][[2]]
)。我查看了通过 Google 找到的文档和一些示例,但没有运气。有任何想法吗?
更新:我应该解释一下,理想情况下我希望能够按名称选择元素,如“沉默”。然而,这似乎不太好用。(我有几个大列表,我想要更改的元素的位置)