何时在'strsplit'中设置'perl = TRUE'不起作用(按预期或根本不起作用)?

Aru*_*run 9 regex pcre r

我只是做了一些基准测试,而试图优化一些代码,并指出,strsplitperl=TRUE比跑步strsplitperl=FALSE.例如,

set.seed(1)
ff <- function() paste(sample(10), collapse= " ")
xx <- replicate(1e5, ff())

system.time(t1 <- strsplit(xx, "[ ]"))
#  user  system elapsed 
# 1.246   0.002   1.268 

system.time(t2 <- strsplit(xx, "[ ]", perl=TRUE))
#  user  system elapsed 
# 0.389   0.001   0.392 

identical(t1, t2) 
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)

所以我的问题(或者更确切地说是标题中的问题的变体)是,在什么情况下绝对需要perl=FALSE(省略fixeduseBytes参数)?换句话说,我们不能用perl=TRUE它做什么可以通过设置来完成perl=FALSE

Ric*_*rta 2

来自文档;)

性能考虑

如果您正在进行大量正则表达式匹配,包括非常长的字符串,您将需要考虑使用的选项。一般来说,PCRE 会比默认的正则表达式引擎更快,并且fixed = TRUE 仍然更快(特别是当每个模式仅匹配几次时)。

当然,这并不能回答“一直使用有没有危险perl=TRUE”的问题。