Найти элемент верхнего уровня, который содержит вложенный элемент во вложенном списке - PullRequest
0 голосов
/ 21 марта 2019

Я хотел бы получить список элементов верхнего уровня, которые содержат определенный подэлемент. Предположим, у меня есть вложенный список:

v <- list(A=list('a', 'b', 'c'), B=list('c','d','e'), C=list('d'))

Я пытаюсь получить список всех элементов верхнего уровня, которые имеют определенный подэлемент:

  • если я ищу 'c', я бы ожидал получить ('A', 'B').
  • если я ищу 'd', я ожидаю получить ('B', 'C')

ПРИМЕЧАНИЕ: предпочитаю решение base-R, но было бы интересно увидеть других

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

sapply альтернатива Filter

names(v)[sapply(v, function(x) 'c' %in% x)]
2 голосов
/ 21 марта 2019

Вы можете использовать Filter:

names(Filter(function(x) "c" %in% x,v))
# [1] "A" "B"
names(Filter(function(x) "d" %in% x,v))
# [1] "B" "C"

Или с библиотекой purrr :

names(purrr::keep(v, ~"c" %in% .))
# [1] "A" "B"
names(purrr::modify_if(v, ~!"c" %in% ., ~NULL))
# [1] "A" "B"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...