我在尝试优化某些代码时做了一些基准测试,发现strsplit
perl=TRUE
比使用strsplit
运行perl=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
所以我的问题(或者更确切地说是标题中的问题的变体)是,在什么情况下绝对需要perl=FALSE
(省略fixed
和useBytes
参数)?换句话说,使用perl=TRUE
我们无法做什么可以通过设置perl=FALSE
来完成?
答案 0 :(得分:2)
来自文档;)
性能考虑因素
如果要进行大量正则表达式匹配(包括非常长的字符串),则需要考虑使用的选项。通常PCRE将比默认的正则表达式引擎更快,并且仍然更快固定= TRUE(特别是当每个模式只匹配几次时)。
当然,这并没有回答“总是使用perl=TRUE
是否有任何危险”的问题