क्षमा करें, लेकिन यह एक टिप्पणी के लिए बहुत सारी पंक्तियां है।
मैं बस याद दिलाना चाहता था कि paste(..., collapse = "|")
के माध्यम से एक मिलान मिलान पैटर्न के रूप में उपयोग किए जाने वाले आइटमों की संख्या सीमित है - नीचे देखें। शायद कोई बता सकता है कि सीमा कहां है? माना जाता है कि संख्या यथार्थवादी नहीं हो सकती है, लेकिन किए जाने वाले कार्य के आधार पर इसे पूरी तरह से हमारे विचारों से बाहर नहीं किया जाना चाहिए।
वास्तव में बड़ी संख्या में वस्तुओं के लिए, पैटर्न के प्रत्येक आइटम को जांचने के लिए एक लूप की आवश्यकता होगी।
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)
स्रोत
2017-11-10 10:48:38
@andrie, यह बिल्कुल शानदार है, यह मान रहा था कि यह वर्षों के लिए असंभव है, जबकि यह सिर्फ एक साधारण रेगेक्स है, –
@ डेविड एडिनबर्ग :-) मैंने कड़वी अनुभव से सीखा है कि आर में कुछ भी असंभव नहीं है। यह हमेशा एक प्रश्न है किस तरह! – Andrie