いくつかのコードを最適化しようとしている間にちょうどベンチマークを行い、strsplit
がperl=TRUE
であることがより速く、strsplit
とperl=FALSE
であることがわかりました。例えば、'strsplit'で 'perl = TRUE'を設定しても、(意図したとおりに)動作しませんか?
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
だから私の質問(というかタイトルに疑問の変化)があるが、どのような状況下では絶対に(fixed
とuseBytes
パラメータを除外)perl=FALSE
を必要とするでしょうか?言い換えれば、perl=FALSE
を設定してperl=TRUE
を使って何ができないのですか?ドキュメントから
「常に
perl=TRUE
を使用する任意の危険性がある」という疑問に答えていません正規表現関数( 'regexec'のようなもの)。たぶん 'perl = TRUE'は将来のRバージョンではデフォルト値になるでしょう。 – agstudy@agstudyこのようなデフォルトを変更すると、既存のコードの_ton_が破損するため、メリットはR Coreにとって魅力的です。 – joran
@ヨラン良い点があります。しかし、利点がすべての場合であることが判明した場合、PCRE ... – agstudy