2013-07-20 9 views
9

いくつかのコードを最適化しようとしている間にちょうどベンチマークを行い、strsplitperl=TRUEであることがより速く、strsplitperl=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 

だから私の質問(というかタイトルに疑問の変化)があるが、どのような状況下では絶対に(fixeduseBytesパラメータを除外)perl=FALSEを必要とするでしょうか?言い換えれば、perl=FALSEを設定してperl=TRUEを使って何ができないのですか?ドキュメントから

+1

「常にperl=TRUEを使用する任意の危険性がある」という疑問に答えていません正規表現関数( 'regexec'のようなもの)。たぶん 'perl = TRUE'は将来のRバージョンではデフォルト値になるでしょう。 – agstudy

+3

@agstudyこのようなデフォルトを変更すると、既存のコードの_ton_が破損するため、メリットはR Coreにとって魅力的です。 – joran

+0

@ヨラン良い点があります。しかし、利点がすべての場合であることが判明した場合、PCRE ... – agstudy

答えて

2

;)

パフォーマンスの考慮

あなたは非常に長い文字列に含め、正規表現のマッチングをたくさんやっている場合は、使用するオプションを検討することになるでしょう。一般に、PCREはデフォルトの正規表現エンジンよりも高速で、fixed = TRUEの方が速く(特に各パターンが数回だけ一致する場合)。もちろん

、これは、私はそれがまだいくつかで実装されていないため、 `perlの= false`をは、単に設計上の選択だと思う

+1

これは役立ちます。しかし、 'perl = TRUE'が壊れてしまうケースがあるかどうかを具体的に知りたいと思います。 – Arun

+1

笑、あなたがそのコメントを書いたとき私は自分の答えを編集していた –

関連する問題