r - `agrep(..., fixed=F)` 的困难

标签 r

?agrep(带有模糊匹配的grep)中,它提到我可以设置参数fixed=FALSE来解释我的模式作为正则表达式。

但是,我无法让它工作!

agrep('(asdf|fdsa)', 'asdf', fixed=F)
# integer(0)

上面应该匹配正则表达式“(asdf|fdsa)”完全匹配本例中的测试字符串“asdf”。

确认:

grep('(asdf|fdsa)', 'asdf', fixed=F)
# 1 : it does match with grep

更令人困惑的是,adist 正确地将模式和字符串之间的距离指定为 0,这意味着 agrep 应该肯定返回 1,而不是大于 integer(0)(0 不可能大于默认的 max.dist = 0.1)。

adist('(asdf|fdsa)', 'asdf', fixed=F)
#      [,1]
# [1,]    0

为什么这不起作用?有什么我不明白的吗?解决方法? 我很高兴使用 adist,但不完全确定如何将 agrep 的默认 max.distance=0.1 参数转换为 adist对应的参数。

(是的,我被困在一台旧计算机上,它的性能无法比 R 2.15.2 更好)

> sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: i686-redhat-linux-gnu (32-bit)    
locale:
 [1] LC_CTYPE=en_AU.utf8       LC_NUMERIC=C             
 [3] LC_TIME=en_AU.utf8        LC_COLLATE=en_AU.utf8    
 [5] LC_MONETARY=en_AU.utf8    LC_MESSAGES=en_AU.utf8   
 [7] LC_PAPER=C                LC_NAME=C                
 [9] LC_ADDRESS=C              LC_TELEPHONE=C           
[11] LC_MEASUREMENT=en_AU.utf8 LC_IDENTIFICATION=C      

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base 

最佳答案

tl;dr: agrep(...,fixed=F) 似乎不适用于“|”特点。使用aregexec

经过进一步调查,我认为这是一个错误,并且 agrep(...,fixed=F) 似乎不能与“|”一起使用正则表达式(尽管 adist(...,fixed=F) 确实如此)。

要详细说明,请注意

adist('(asdf|fdsa)', 'asdf', fixed=T) # 7
nchar('(asdf|fdsa)')                  # 11

如果“asdf”被 agrep 转换为非正则表达式字符串“(asdf|fdsa)”,那么它的距离将为 7。

关于这一点:

agrep('(asdf|fdsa)', 'asdf', fixed=F, max.distance=7) # 1
agrep('(asdf|fdsa)', 'asdf', fixed=F, max.distance=6) # integer(0)

如果fixed=T,这些是我期望的结果。如果 fixed=F,我的正则表达式将完全匹配“asdf”,并且距离将为 0,因此我总是会从 agrep.

所以它看起来agrep(pattern, x,fixed=F)不起作用,即它实际上将fixed视为TRUE某种模式。

正如 @Arun 提到的,它可能只是“|”不起作用的正则表达式。例如,agrep('la[sb]y', 'lazy',fixed=FALSE)确实按预期工作。

<小时/>

编辑:解决方法(感谢@Arun)

函数 aregexec 似乎可以工作。

> aregexec('(asdf|fdsa)', 'asdf', fixed=F)
[[1]]
[1] 1 1
attr(,"match.length")
[1] 4 4

关于r - `agrep(..., fixed=F)` 的困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15871702/

相关文章:

r - 数据框马赛克图

r - 如何简单而高效地编写二次形式的代码

r - 在 dpylr 中使用左连接来匹配和填充数据框 R

r - 根据用户 ID 和时间差异创建 session ID

r - 线搜索在训练 ksvm prob.model 时失败

r - 为什么 as.factor 在 apply 内部使用时会返回一个字符?

r - 如何修复绘图中的轴以查看标题?

r - R 中的积分函数

r - 在 R 图中使用 data.frame 的行名称?

r - 如何动态构建字符串并将其传递给 R 中 dplyr 的 mutate() 函数?