Используя различные функции 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 (другими словами, элементы 1 и 2 как A, так и B), возможно ли это с map()
? И если нет, то как лучше всего это сделать?
Вот что, как я думал, сработает:
list4 <- listy %>% map(1, 2) %>% str
Где 1 относится к первому элементу из каждого подсписка, а 2 ко второму. Но это возвращает то же самое, что и list1
выше. Использование c(1, 2)
не работает, поскольку оно относится к вложенной структуре (например, [[1]][[2]]
). Я просмотрел документацию и несколько примеров, найденных в Google, но не повезло. Любые идеи?
Обновление: я должен объяснить, что в идеале я хотел бы иметь возможность выбирать элементы по имени, как в «тишине». Однако это, похоже, работает не слишком хорошо. (У меня есть несколько больших списков, в которых меняется положение нужных мне элементов)