R:agrep结果量词

R: agrep results quantifier

是否有内置的方法来量化 agrep 函数的结果?例如。在

agrep("test", c("tesr", "teqr", "toar"), max = 2, v=T)
[1] "tesr" "teqr"

tesr 距离 test 只有 1 个字符排列,而 teqr 是 2,而 toar 是 3,因此未找到。显然,tesrteqr 具有更高的 "probability"。如何以排列数或百分比的形式检索它? 谢谢!

编辑:很抱歉没有把这个问题放在首位。我已经运行一个两步程序:agrep得到我的列表,然后adist得到N个排列。 adist 较慢,运行 时间是我数据集中的一个重要因素

Levenshtein 距离是从一个字符串到另一个字符串的编辑次数。包 'RecordLinkage' 可能很有趣。它提供了下面的编辑距离计算,它应该执行on par with agrep。虽然它不会 return 与 agrep.

相同的结果
library(RecordLinkage)
ld <- levenshteinDist("test", c("tesr", "teqr", "toar"))
c("tesr", "teqr", "toar")[which(ld < 3)]

使用 adist() 的另一个选项:

s <- c("tesr", "teqr", "toar")
s[adist("test", s) < 3]

或使用stringdist

library(stringdist)
s[stringdist("test", s, method = "lv") < 3]

给出:

#[1] "tesr" "teqr"

基准

x <- rep(s, 10e5)
library(microbenchmark)
mbm <- microbenchmark(
  levenshteinDist = x[which(levenshteinDist("test", x) < 3)],
  adist = x[adist("test", x) < 3],
  stringdist = x[stringdist("test", x, method = "lv") < 3],
  times = 10
)

给出:

Unit: milliseconds
            expr       min        lq      mean    median        uq       max neval cld
 levenshteinDist  840.7897 1255.1183 1406.8887 1398.4502 1510.5398 1960.4730    10  b 
           adist 2760.7677 2905.5958 2993.9021 2986.1997 3038.7692 3472.7767    10   c
      stringdist  145.8252  155.3228  210.4206  174.5924  294.8686  355.1552    10 a