我想匹配包含多个模式的向量data.table中的值。演示代码,我已经是:有效的方法来执行正则表达式匹配与模式向量
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]
哪个正确返回:
sites
1: www.google.com
2: plus.google.com
3: www.bbc.co.uk
但是因为这包含嵌套sapply,它是具有较大data.tables运行非常缓慢。
有没有更高效的方法来做到这一点,将与更大的表一起工作?
注:在实际的代码,'patterns'有几百个项目和正则表达式包含的东西像向后看,所以把它们放在一条线上是不实际的。 – Iain