2011-09-09 13 views
7

stringr पैकेज में str_split के लिए दस्तावेज़ में कहा गया है पैटर्न तर्क के लिए कि:असंगत व्यवहार और strsplit

तो "" अलग-अलग पात्रों में विभाजित हो।

जो बताता है कि यह इस संबंध में strsplit जैसा व्यवहार करता है। हालांकि,

library(stringr) 
str_split("abcab","") 
[[1]] 
[1] "" "a" "b" "c" "a" "b" 

एक प्रमुख खाली स्ट्रिंग के साथ। इस के साथ तुलना,

strsplit("abcab","") 
[[1]] 
[1] "a" "b" "c" "a" "b" 

रिक्त स्ट्रिंग अग्रणी सामान्य व्यवहार जब गैर रिक्त स्ट्रिंग पर बंटवारे प्रतीत हो रहा है,

strsplit("abcab","ab") 
[[1]] 
[1] "" "c" 

लेकिन फिर भी, str_split एक 'अतिरिक्त' अनुगामी रिक्त स्ट्रिंग उत्पन्न करता है:

str_split("abcab","ab") 
[[1]] 
[1] "" "c" "" 

क्या यह विसंगति एक बग, फीचर, दस्तावेज में एक त्रुटि है या सिर्फ 'अपेक्षित व्यवहार' की एक अलग धारणा है?

+1

स्टैक ओवरफ्लो पर पूछने के बजाय डेवलपर के साथ एक बग रिपोर्ट दर्ज करना बेहतर होगा ... – hadley

+1

क्षमा करें @ हैडली, मैं मूल रूप से कभी नहीं सोचता कि मुझे एक बग मिला है। मेरे पास बहुत कम आत्म सम्मान है। – joran

+0

शायद यह एक बग नहीं है, लेकिन दिए गए डेलीमीटर * द्वारा एक स्ट्रिंग को विभाजित करने की एक अलग व्याख्या। ('अपेक्षित व्यवहार' की एक अलग धारणा।) यदि आप डिलिमीटर ** ab ** द्वारा स्ट्रिंग ** abcab ** विभाजित करते हैं, तो मुझे उम्मीद है कि परिणाम '' और 'c' और' '। हालांकि, सभी प्रोग्रामर उसी तरह व्याख्या नहीं करते हैं। –

उत्तर

4

आप डिलीमीटर के रूप में अल्पविराम का उपयोग करते हैं, तो "उम्मीद" (अपने लाभ भिन्न हो सकते हैं) परिणाम अधिक स्पष्ट है:

# expect "" "2" "3" "4" "" 

strsplit(",2,3,4,", ",") 
# [[1]] 
# [1] "" "2" "3" "4" 

str_split(",2,3,4,", ",") 
# [[1]] 
# [1] "" "2" "3" "4" "" 

अगर मैं n अल्पविराम का है तो मैं उम्मीद (n+1) तत्वों लौटा दी है। इसलिए मैं str_split से परिणाम पसंद करता हूं। हालांकि, मैं जरूरी यह एक बग strsplit में कहेंगे नहीं, प्रदर्शन में के बाद से विज्ञापित के रूप में: (? से strplit)

ध्यान दें कि इसका मतलब है कि अगर वहाँ एक की शुरुआत में एक मैच है (गैर खाली) स्ट्रिंग, आउटपुट का पहला तत्व '' '' है, लेकिन यदि स्ट्रिंग के अंत में कोई मिलान है, तो आउटपुट जैसा मिलान हटा दिया गया है। के रूप में वहाँ "" एक स्ट्रिंग में दिखाए जाने की गिनती करने के लिए कोई रास्ता नहीं है

"", जटिल काम है। इसलिए इसे एक विशेष मामले के रूप में इलाज करना उचित लगता है।

(से? Str_split) अगर '' '' '' 'अलग-अलग अक्षरों में विभाजित होता है।

इस पर आधारित मेरा सुझाव है कि आपको एक बग मिला है और उसे हैली की सलाह लेनी चाहिए और इसकी रिपोर्ट करनी चाहिए!

+3

मैंने इसकी रिपोर्ट की, यह देखते हुए कि हैली इस समारोह के लेखक कैसे हैं। ;) – joran

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