R agrep()函数的行为

R agrep()函数的行为,r,string-matching,agrep,R,String Matching,Agrep,我很难理解agrep()函数的结果。我不明白我在功能描述中遗漏了什么。 agrep()用于模糊匹配,我想用它来纠正一些拼写错误。我只允许最多2次插入/删除/替换 以下是我的代码,仅作为示例: check=c("73SAINTGERMAINLACHAMBOTTE","73CHAMBERY") agrep("73SAINTGERVAIS",check,ignore.case=TRUE,max.distance=2,value=TRUE) 在这里,我希望这个请求没有答案,因为我无法将“73SAINT

我很难理解
agrep()
函数的结果。我不明白我在功能描述中遗漏了什么。
agrep()
用于模糊匹配,我想用它来纠正一些拼写错误。我只允许最多2次插入/删除/替换

以下是我的代码,仅作为示例:

check=c("73SAINTGERMAINLACHAMBOTTE","73CHAMBERY")
agrep("73SAINTGERVAIS",check,ignore.case=TRUE,max.distance=2,value=TRUE)
在这里,我希望这个请求没有答案,因为我无法将
“73SAINTGERVAIS”
转换为
“73SAINTGERMAINLACHAMBOTTE”
“73CHAMBERY”
,最多进行2次插入/删除/替换。 然而,结果是:

[1] "73SAINTGERMAINLACHAMBOTTE"

这是否意味着插入/删除/替换的概念不是基于字符的(我是说字符串
“MAINLACHALBOTTE”
被视为1个插入)?

这是因为它也在进行部分匹配。例如,
'73SAINTGERVAIS'
距离子字符串
'73SAINTGERMAIN'
两个距离

您可能希望尝试以下操作:

check=c("73SAINTGERMAINLACHAMBOTTE","73CHAMBERY", "73SAINTGERMAIN")
adist("73SAINTGERVAIS",check) <= 2
      [,1]  [,2] [,3]
[1,] FALSE FALSE TRUE
check=c(“73SAINTGERMAINLACHAMBOTTE”、“73CHAMBERY”、“73SAINTGERMAIN”)

adist(“73SAINTGERVAIS”,检查)好的,谢谢,我不理解“内在”的概念,现在清楚了。
check[as.logical(adist("73SAINTGERVAIS",check) <= 2)]