修改::此错误已在的R 32位版本发现固定中的R版本2.9.2


这是由@leoniedu今天啾啾给我,我没有回答他,所以我想我会在这里发布。

我已阅读AGREP()(模糊字符串匹配)的文档,看来,我不完全了解的最大距离的参数。下面是一个例子:

pattern <- "Staatssekretar im Bundeskanzleramt"
x <- "Bundeskanzleramt"
agrep(pattern,x,max.distance=18) 
agrep(pattern,x,max.distance=19)

这行为完全像我期望的那样。有18个字符字符串之间的不同,所以我希望这是一个比赛的门槛。这里是什么困惑我:

agrep(pattern,x,max.distance=30) 
agrep(pattern,x,max.distance=31)
agrep(pattern,x,max.distance=32) 
agrep(pattern,x,max.distance=33)

为什么30点33的匹配,而不是31和32?为了节省一些计数

> nchar("Staatssekretar im Bundeskanzleramt")
[1] 34
> nchar("Bundeskanzleramt")
[1] 16
有帮助吗?

解决方案

我张贴这将R列表上而回并报告为在R-缺陷列表中的错误。我也没有好的反应,所以我挖苦,看看错误是可重复的或我只是失去了一些东西。 JD龙能够重现它,并亲切地张贴的问题在这里。

需要注意的是,至少在R,那么,AGREP是用词不当,因为它的的匹配的正则表达式,而grep的代表“全局搜索正则表达式和打印”。它不应该有问题的模式比目标向量更长的时间。 (我认为!)

在我的Linux服务器,一切都很好,但没有那么在我的Mac和Windows计算机。

的Mac: sessionInfo() ř版本2.9.1(2009-06-26) I386的苹果darwin8.11.1 区域: 的en_US.UTF-8 /的en_US.UTF-8 / C / C /的en_US.UTF-8 /的en_US.UTF-8

AGREP(图案,X,最大距离= 30) [1] 1

  

AGREP(图案,X,最大距离= 31)   整数(0)   AGREP(图案,X,最大距离= 32)   整数(0)   AGREP(图案,X,最大距离= 33)   [1] 1

Linux中: ř版本2.9.1(2009-06-26) x86_64的未知-Linux的GNU

区域设置: LC_CTYPE =的en_US.UTF-8; LC_NUMERIC = C; LC_TIME =的en_US.UTF-8; LC_COLLATE =的en_US.UTF-8; LC_MONETARY = C; LC_MESSAGES =的en_US.UTF-8; LC_PAPER =的en_US.UTF-8; LC_NAME = ℃; LC_ADDRESS = C; LC_TELEPHONE = C; LC_MEASUREMENT =的en_US.UTF-8; LC_IDENTIFICATION = C

  

AGREP(图案,X,最大距离= 30)   [1] 1   AGREP(图案,X,最大距离= 31)   [1] 1   AGREP(图案,X,最大距离= 32)   [1] 1   AGREP(图案,X,最大距离= 33)   [1] 1

其他提示

我不知道,如果你的例子是有道理的。对于基本的grep(),图案通常是一个简单的或正则表达式,而x是其元素获得匹配图案的载体。具有图案与x令我奇数更长的字符串。

考虑这个,我们只是使用grep代替SUBSTR:

R> grep("vo", c("foo","bar","baz"))   # vo is not in the vector
integer(0)
R> agrep("vo", c("foo","bar","baz"), value=TRUE) # but is close enough to foo
[1] "foo"
R> agrep("vo", c("foo","bar","baz"), value=TRUE, max.dist=0.25) # still foo
[1] "foo"
R> agrep("vo", c("foo","bar","baz"), value=TRUE, max.dist=0.75) # now all match
[1] "foo" "bar" "baz"
R>  
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top