Lo siento por hacer esto una respuesta additonal, pero es demasiado muchas líneas de comentario.
Solo quería recordar que el número de elementos que se pueden pegar juntos a través de paste(..., collapse = "|")
para usarse como un único patrón coincidente es limitado - vea debajo. ¿Tal vez alguien puede decir dónde está exactamente el límite? Es cierto que el número podría no ser realista, pero, dependiendo de la tarea a realizar, no debería excluirse por completo de nuestras consideraciones.
Para una cantidad realmente grande de elementos, se requerirá un bucle para verificar cada elemento del patrón.
set.seed(0)
samplefun <- function(n, x, collapse){
paste(sample(x, n, replace=TRUE), collapse=collapse)
}
words <- sapply(rpois(10000000, 8) + 1, samplefun, letters, '')
text <- sapply(rpois(1000, 5) + 1, samplefun, words, ' ')
#since execution takes a while, I have commented out the following lines
#result <- grepl(paste(words, collapse = "|"), text)
# Error in grepl(pattern, text) :
# invalid regular expression
# 'wljtpgjqtnw|twiv|jphmer|mcemahvlsjxr|grehqfgldkgfu|
# ...
#result <- stringi::stri_detect_regex(text, paste(words, collapse = "|"))
# Error in stringi::stri_detect_regex(text, paste(words, collapse = "|")) :
# Pattern exceeds limits on size or complexity. (U_REGEX_PATTERN_TOO_BIG)
@andrie, esto absolutamente brillante, suponía que es imposible durante años, mientras que es simplemente una expresión regular, –
@DavidArenburg :-) He aprendido de la amarga experiencia que nada es imposible en R. Siempre es solo una cuestión de ¡cómo! – Andrie