4

我正在尝试将字符串与字符串向量匹配:

a <- c('abcde', 'abcdf', 'abcdg')

agrep('abcdh', a, max.distance=list(substitutions=1))
# [1] 1 2 3

agrep('abchh', a, max.distance=list(substitutions=2))
# character(0)

我没想到后一种结果是因为从模式中替换两个字符会使模式与向量元素相同。但是,这确实适用于all而不是substitutions

agrep('abchh', a, max.distance=list(all=2))
# [1] 1 2 3

我需要更改哪些内容以匹配允许超过 1 个替换?只是substitution一个破碎的选择吗?谢谢。

注意:这个问题与这个问题基本相同:https ://stat.ethz.ch/pipermail/r-help/2011-June/281731.html ,但从未得到回答。

4

1 回答 1

1

无论如何,我没有意识到这些问题已经那么老了:

功能需要cost合适。正如ping所说,您必须设置匹配成本的最大数量;在你的例子中:

a <- c('abcde', 'abcdf', 'abcdg')
agrep('abcdh', a, max.distance = list(cost = 1))
[1] 1 2 3
agrep('abchh', a, max.distance = 2)
[1] 1 2 3

现在,如果您设置cost程序可以进行插入、删除和替换。如果您只想评估替换,则:

agrep('abhhh', a, 
        max.distance=list(cost=3, substitutions=3, 
                          deletions=0, insertions=0))
[1] 1 2 3
于 2015-05-01T01:02:44.573 回答