Если ваш код выполняется levenshteinSim
как вызов функции каждый раз для каждой комбинации s1
и s2
, это будет мучительно медленным.Может быть, сначала составить список всех комбинаций s1
/ s2
, а затем запустить levenshteinSim
один раз в векторизованном виде?Это должно быть на порядки быстрее:
library(dplyr); library(purrr); library(RecordLinkage)
s1 <- rep(c("paul","patty","harris"), 80)
s2 <- rep(c("darren", "natty", "haris", "paulie"), 80)
system.time({
egs <- expand.grid(s1, s2, stringsAsFactors=FALSE)
lv <- do.call(levenshteinSim, unname(egs))
egs <- egs[!(lv > 0.6),]
})
# user system elapsed
# 0.11 0.00 0.1
system.time({
cross2(.x = s1, .y = s2, .filter = ~levenshteinSim(.x, .y) > 0.6)
})
# user system elapsed
# 2.98 0.00 2.97