我有一个大文本向量,我想搜索特定的字符或短语。正则表达式将永远存在。我该如何快速搜索?
示例数据:
R <- 10^7
garbage <- replicate( R, paste0(sample(c(letters[1:5]," "),10,replace=TRUE),collapse="") )
答案 0 :(得分:10)
如果确实需要正则表达式,通常可以使用PCRE库(通过设置perl=TRUE
)来提高默认正则表达式引擎的性能。 ?grep
中还有其他效果提示:
效果考虑因素:
如果你正在做很多正则表达式匹配,包括on 很长的字符串,你会想要考虑使用的选项。 通常,PCRE将比默认正则表达式更快 引擎,'fixed = TRUE'仍然更快(特别是当每个模式 只匹配几次。
如果您使用的是单字节语言环境并且标记为UTF-8 在该语言环境中可表示的字符串,首先将它们转换为 只需一个UTF-8字符串就可以强制完成所有匹配 Unicode,默认POSIX吸引约3倍的惩罚 1003.2模式。
如果你可以使用'useBytes = TRUE',那么字符串将不会 匹配前检查,实际匹配会更快。经常 自字节模式以来,UTF-8语言环境中基于字节的匹配就足够了 一个角色永远不会与另一个角色相匹配。
答案 1 :(得分:6)
这里不需要正则表达式,它们的功能带来了计算成本。
您可以使用,fixed=TRUE
参数关闭R中任何正则表达式函数中的正则表达式解析。速度提升导致:
library(microbenchmark)
m <- microbenchmark(
grep( " ", garbage, fixed=TRUE ),
grep( " ", garbage )
)
m
Unit: milliseconds
expr min lq median uq max neval
grep(" ", garbage, fixed = TRUE) 491.5634 497.1309 499.109 503.3009 1128.643 100
grep(" ", garbage) 1786.8500 1801.9837 1810.294 1825.2755 3620.346 100