Вот решение Reduce
.
patterns <- c("Rains", "Germany")
Reduce('&', lapply(patterns, function(x) grepl(x, list_documents, ignore.case = TRUE)))
#[1] TRUE FALSE FALSE
Сначала оно создает список логических векторов, каждый из которых с результатом grepl
применяется к каждому из шаблонов. Затем Reduce
И члены списка в парах.
Обратите внимание, что вышеупомянутое решение все еще работает, если есть более 2 шаблонов для поиска и AND. Однострочник можно сделать функцией, на этот раз отделяющей создание списка и Reduce
.
and_grepl <- function(pattern, x, ...){
results <- lapply(pattern, function(p) grepl(p, x, ...))
Reduce('&', results)
}
and_grepl(patterns, list_documents, ignore.case = TRUE)
#[1] TRUE FALSE FALSE
pat <- c("A", "B", "C")
new_list <- c("ABCD", "ABCE", "ABDE", "DEFG")
and_grepl(pat, new_list)
#[1] TRUE TRUE FALSE FALSE