Определить в list2, есть ли какие-либо строки (целые или часть большей строки), содержащиеся в list1 - PullRequest
0 голосов
/ 16 мая 2019

У меня есть два списка:

list1<-list("q","w","e","r","t")
list2<-list("a","a","aq","c","f","g")

Мне нужен код, который выдаст TRUE, потому что q находится в третьей ячейке list2.Мне нужно найти каждую ячейку list1 в list2.Я имею в виду, что мне нужно искать в каждой ячейке list2 любые строки, содержащиеся в каждой ячейке list1.Соответствие должно быть как для всего совпадения, так и для частичного (если строка из list1 является частью большей строки в list2), и в обоих случаях мне нужно получить TRUE.

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Не уверен, что здесь особенно важен ввод списка. Вот способ, который позволяет избежать использования любых итерационных функций, таких как apply. Мы можем свернуть входной список в один шаблон регулярного выражения, а затем сверять с ним весь второй список. Возможно, вам следует быть осторожным, если в списке list1 есть какие-либо специальные символы, хотя это относится к любому методу сопоставления строк.

library(stringr)
list1 <- list("q", "w", "e", "r", "t")
list2 <- list("a", "a", "aq", "c", "f", "g")

pat <- unlist(list1) %>% str_c(collapse = "|")

list2 %>%
  unlist %>%
  str_detect(pat) %>%
  any
#> [1] TRUE

Создано в 2019-05-16 с помощью пакета Представить (v0.2.1)

1 голос
/ 16 мая 2019
any(sapply(list1, grepl, list2))
# [1] TRUE

или эквивалентно

greplv <- Vectorize(grepl, 'pattern')
any(greplv(list1, list2))
# [1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...