【发布时间】:2014-09-13 10:12:28
【问题描述】:
我正在尝试将字符串与字符串向量匹配:
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,但从未得到回答。
【问题讨论】:
-
如果你只想允许替换,你可以使用
all=2, insertions=0, deletions=0, substitions=2。除了添加该行为之外,我无法解释该行为,例如,当字符串长度大于 10 时它会消失,因此可能链接到If cost is not given, all defaults to 10%(来自?agrep) -
嗯,对我来说,即使我使用很长的字符串,它也没有消失。它看起来确实有点马车,就像它在超越自己一样。但是解决方法是个好主意,谢谢!
-
为了使用相同的比较,我将
agrep("abchh", "abcdd", max.distance=list(substitutions=2))与agrep("aaaaaaabchh", "aaaaaaabcdd", max.distance=list(substitutions=2))进行比较 -
我试过这个并注意到 integer(0) 回来了,但也是 .2 和 .21 之间的区别 > agrep('abchh', a, max.distance=0.21) [1] 1 2 3 > agrep('abchh', a, max.distance=0.2) 整数(0)