Комментарий Уве может быть самым простым для вас.Если это может быть в любом порядке, то вам нужно быть немного более креативным.
Поскольку у меня нет ваших файлов или чего-то подобного, я создам несколько примеров:
# filelisting <- list.files(path=...) # no pattern
filelisting <- c(
"Rob travel v1.2.docx",
"the v1.2 version of travel for Rob.xlsx",
"the v1.3 version of travel for Rob.xlsx",
"the v1.2 version of travel for Carol.xlsx",
"something else entirely.pptx",
"C_Mu.R",
"My travel v1.2.txt"
)
c1 <- "Rob"
c2 <- "travel"
c3 <- "v1.2"
Если вам нужны все три, но с учетом разных заказов, то
grepl(paste(c1,c2,c3,sep=".*"), filelisting)
# [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE
завершится неудачно, потому что пропустит второй файл.
Вот мысль:
sapply(c(c1,c2,c3), grepl, filelisting)
# Rob travel v1.2
# [1,] TRUE TRUE TRUE
# [2,] TRUE TRUE TRUE
# [3,] TRUE TRUE FALSE
# [4,] FALSE TRUE TRUE
# [5,] FALSE FALSE FALSE
# [6,] FALSE FALSE FALSE
# [7,] FALSE TRUE TRUE
Отздесь вы можете просто искать строки, в которых все значения имеют значение true, например
apply(sapply(c(c1,c2,c3), grepl, filelisting), 1, all)
# [1] TRUE TRUE FALSE FALSE FALSE FALSE FALSE
(используя это для индексации по filelisting
).
Вы можете немного обобщить это, еслиможет иметь более трех условий и / или число условий может изменяться.
allcs <- c("Rob", "travel", "v1.2", "docx")
apply(sapply(allcs, grepl, filelisting), 1, all)
# [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE
В каждой строке вы можете использовать реальный материал типа regex (что означает, что вам нужно экранировать язык regex):
allcs <- c("Rob", "travel", "v1.2", "xlsx|docx")
apply(sapply(allcs, grepl, filelisting), 1, all)
# [1] TRUE TRUE FALSE FALSE FALSE FALSE FALSE