在 list2 中检测 list1 中是否包含任何字符串(整个或更大字符串的一部分)

Detect in list2 if there are any strings (whole or part of bigger string) that is contained in list1

我有两个列表:

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

我需要一个可以给出 TRUE 的代码,因为 qlist2 的第三个单元格中。我需要在 list2 中搜索 list1 的每个单元格。我的意思是我需要在 list2 的每个单元格中搜索 list1 的每个单元格中包含的任何字符串。匹配应该针对整个匹配但也针对部分匹配(如果来自 list1 的字符串是 list2 中较大字符串的一部分)并且在这两种情况下我都需要接收 TRUE.

不确定在这种情况下列表输入在这里是否特别重要。这是一种避免使用任何迭代函数(如 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

reprex package (v0.2.1)

创建于 2019-05-16
any(sapply(list1, grepl, list2))
# [1] TRUE

或等效

greplv <- Vectorize(grepl, 'pattern')
any(greplv(list1, list2))
# [1] TRUE