我正在努力接受agrep
用于模糊匹配的功能。假设你有这样的字符串:
x <- c("me", "mum", "mm", "my", "mm mm", "mhm", "mother")
进一步假设我想匹配那些最接近mm
. 使用agrep
,匹配的相互“接近度”或“距离”由“广义的 Levenshtein 编辑距离(将一个字符串转换为另一个字符串所需的插入、删除和替换的最小可能加权数”(来自 R 文档agrep
)来衡量。据我了解,Levenshtein 距离有效地反映了转换的成本。因此,例如,如果参数cost
设置为0
,则agrep
返回mm
and mm mm
,这是可以预期的,因为两个字符串需要零转换:
agrep("mm", x, max.distance = list(cost = 0), value = T)
[1] "mm" "mm mm"
但是,如果cost
设置为 的(荒谬的)一小部分1
,则所有字符串都匹配,尽管看起来,例如转换mother
为mm
涉及至少两个操作,即 (i) 删除other
和 (ii) 将其替换为m
因此应该更加“昂贵”来实现:
agrep("mm", x, max.distance = list(cost = 0.000000000000000000000000000000001), value = T)
[1] "me" "mum" "mm" "my" "mm mm" "mhm" "mother"
我的猜测是,我并不真正了解agrep
它的论点是如何工作的,尤其是距离是如何计算的,因此非常感谢有关此问题的专家指导。