Вопрос по pcre, r, regex – Когда настройка 'perl = TRUE' в 'strsplit' не работает (как задумано или вообще)?

9

Я просто сделал несколько тестов, пытаясь оптимизировать код и заметил, что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?

или даже простоoptions(perl.default = TRUE) Ricardo Saporta
@ Йоран, хорошая мысль. Но если преимущества доказаны во всех случаях, почему бы не добавить своего рода «хорошее предупреждение» или «глобальные настройки», чтобы поощрить использование PCRE ... agstudy
@agstudy Преимущества должны бытьочень убедительно R Core, потому что изменение по умолчанию, как это сломало бытонна существующего кода. joran
думаюperl=FALSE это просто выбор дизайна, так как он еще не реализован в некоторой функции регулярного выражения (например,regexec). Может бытьperl=TRUE будет значением по умолчанию в будущих версиях R. agstudy

Ваш Ответ

1   ответ
2

Вопросы производительности

Если вы выполняете много совпадений с регулярными выражениями, в том числе для очень длинных строк, вам следует рассмотреть используемые параметры. Как правило, PCRE будет быстрее, чем стандартный механизм регулярных выражений, и будет исправлен = ИСТИНА еще быстрее (особенно, если каждый шаблон сопоставляется только несколько раз).

Конечно, это не отвечает на вопрос «есть ли опасность всегда использоватьperl=TRUE"

ха-ха, я редактировал свой ответ, когда ты написал этот комментарий Ricardo Saporta
Это помогает. Но я хотел бы знать конкретно, есть ли случаи, когдаperl=TRUE брейки. Arun

Похожие вопросы