2013-07-20 2 views
9

कुछ कोड का अनुकूलन करने की कोशिश करते हुए मैं बस कुछ बेंच मार्किंग किया था और कहा कि strsplitperl=TRUE साथ तेजीperl=FALSE साथ strsplit चलाने की तुलना में है। उदाहरण के लिए,'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 

तो मेरे सवाल (या बल्कि शीर्षक में सवाल का एक परिवर्तन), है क्या तहत परिस्थितियों होगा बिल्कुल जरूरत perl=FALSE (fixed और useBytes मापदंडों बाहर छोड़कर)? दूसरे शब्दों में, हम perl=TRUE का उपयोग करके क्या नहीं कर सकते हैं जो perl=FALSE सेट करके किया जा सकता है?

+1

मुझे लगता है कि 'पर्ल = FALSE' सिर्फ एक डिजाइन पसंद है, क्योंकि यह अभी तक कुछ में लागू नहीं किया गया है regex फ़ंक्शन (जैसे 'regexec')। शायद 'perl = TRUE' भविष्य के संस्करणों में डिफ़ॉल्ट मान होगा। – agstudy

+3

@agstudy लाभ को कोर के लिए _extremely_ मजबूर होना होगा क्योंकि इस तरह के डिफ़ॉल्ट को बदलने से मौजूदा कोड का _ton_ टूट जाएगा। – joran

+0

@joran अच्छा बिंदु। लेकिन अगर सभी मामलों में लाभ साबित होते हैं, पीसीआरई के उपयोग को प्रोत्साहित करने के लिए "अच्छी चेतावनी" या "वैश्विक सेटिंग्स" क्यों नहीं जोड़ना है ... – agstudy

उत्तर

2
प्रलेखन से

;)

प्रदर्शन विचार

आप नियमित अभिव्यक्ति मिलान की एक बहुत कुछ कर रहे हैं, बहुत लंबे तार पर सहित, आप विकल्पों का इस्तेमाल किया पर विचार करना चाहते हो जाएगा। आम तौर पर पीसीआरई डिफ़ॉल्ट नियमित अभिव्यक्ति इंजन से तेज़ होगा, और निश्चित = सही तेज़ अभी भी (विशेष रूप से जब प्रत्येक पैटर्न केवल कुछ बार मेल खाता है)।

बेशक

, इस सवाल का जवाब नहीं है "वहाँ हमेशा perl=TRUE का उपयोग कर के लिए किसी भी खतरे हैं"

+1

इससे मदद मिलती है। लेकिन मैं विशेष रूप से जानना चाहता हूं, अगर ऐसे मामले हैं जहां 'perl = TRUE' तोड़ता है। – Arun

+1

हाहा, मैं अपना जवाब संपादित कर रहा था क्योंकि आपने उस टिप्पणी को लिखा था –

संबंधित मुद्दे