9

我只是在尝试优化某些代码时进行了一些基准测试,并观察到strsplit​​withperl=TRUE比运行with更快。例如,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

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

4

1 回答 1

2

从文档中;)

性能注意事项

如果您正在执行大量正则表达式匹配,包括非常长的字符串,您将需要考虑使用的选项。通常 PCRE 会比默认的正则表达式引擎更快,而 fixed = TRUE 仍然更快(尤其是当每个模式只匹配几次时)。

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

于 2013-07-20T01:48:11.400 回答