Ich versuche, Werte in einer data.table mit einem Vektor zu vergleichen, der mehrere Muster enthält. Die Demo-Code, den ich habe, ist:Effiziente Regexp-Anpassung mit einem Mustervektor
library(data.table)
sites <- c("www.google.com", "plus.google.com", "www.yahoo.com", "www.bbc.co.uk")
patterns <- c("bb", "goog")
x <- data.table(sites)
# Regexp version of the in operator, iterates over a group
`%match_in%` <- function (values, match_list) {
sapply(values,
function (x, ml) {
any(sapply(ml, grepl, x, ignore.case=TRUE, perl=TRUE))
}
,match_list
)}
x[sites %match_in% patterns]
die korrekt zurückgibt:
sites
1: www.google.com
2: plus.google.com
3: www.bbc.co.uk
jedoch, weil diese eine verschachtelte sapply enthält, ist es sehr langsam mit größeren data.tables laufen.
Gibt es eine effizientere Möglichkeit, dies zu tun, die mit größeren Tabellen funktioniert?
HINWEIS: In dem eigentlichen Code, 'patterns' hat ein paar hundert Artikel und die Regex gehören Dinge wie Look-Behinds, also wäre es nicht praktisch, sie in eine Linie zu setzen. – Iain