我很难理解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插入)?
答案 0 :(得分:2)
这是因为它也在进行部分匹配。例如,'73SAINTGERVAIS'
距子串'73SAINTGERMAIN'
两个距离。
您可能想尝试adist
,而不是这样:
check=c("73SAINTGERMAINLACHAMBOTTE","73CHAMBERY", "73SAINTGERMAIN")
adist("73SAINTGERVAIS",check) <= 2
[,1] [,2] [,3]
[1,] FALSE FALSE TRUE
如果您希望匹配输入字符串的矢量作为输出,您可以进一步执行以下操作:
check[as.logical(adist("73SAINTGERVAIS",check) <= 2)]