Właśnie zrobiłem kilka badań porównawczych podczas próby optymalizacji kodu i zaobserwował, że strsplit
z perl=TRUE
jest szybciej niż bieganie strsplit
z perl=FALSE
. Na przykład,Kiedy ustawienie "perl = TRUE" w "strsplit" nie działa (zgodnie z przeznaczeniem lub w ogóle)?
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
Więc moje pytanie (czy raczej wariacja na pytanie w tytule) to, w jakich okolicznościach byłoby absolutnie trzeba perl=FALSE
(pomijając parametry fixed
i useBytes
)? Innymi słowy, czego nie możemy zrobić, używając perl=TRUE
, które można zrobić, ustawiając perl=FALSE
?
myślę 'perl = FALSE jest tylko wybór projektu, ponieważ nie jest jeszcze zaimplementowana w niektórych funkcja regex (jak 'regexec'). Może 'perl = TRUE' będzie domyślną wartością w przyszłych wersjach R. – agstudy
@agstudy Korzyści musiałyby być wyjątkowo ważne dla R Core, ponieważ zmiana wartości domyślnej spowodowałaby złamanie _ton_ istniejącego kodu. – joran
@joran dobry punkt. Ale jeśli korzyści zostaną udowodnione we wszystkich przypadkach, dlaczego nie dodać "dobrego ostrzeżenia" lub "ustawień globalnych", aby zachęcić do korzystania z PCRE ... – agstudy