R agrep() 函数行为
R agrep() function behaviour
我无法理解 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'
.
两个距离
您可能想尝试 adist
,而不是像这样:
check=c("73SAINTGERMAINLACHAMBOTTE","73CHAMBERY", "73SAINTGERMAIN")
adist("73SAINTGERVAIS",check) <= 2
[,1] [,2] [,3]
[1,] FALSE FALSE TRUE
如果你想输出匹配的输入字符串的向量,你可以进一步执行以下操作:
check[as.logical(adist("73SAINTGERVAIS",check) <= 2)]
我无法理解 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'
.
您可能想尝试 adist
,而不是像这样:
check=c("73SAINTGERMAINLACHAMBOTTE","73CHAMBERY", "73SAINTGERMAIN")
adist("73SAINTGERVAIS",check) <= 2
[,1] [,2] [,3]
[1,] FALSE FALSE TRUE
如果你想输出匹配的输入字符串的向量,你可以进一步执行以下操作:
check[as.logical(adist("73SAINTGERVAIS",check) <= 2)]