ऐसा लगता है कि वेस ने एक ज्ञात मुद्दे की खोज की हो सकती है data.table
जब अद्वितीय स्ट्रिंग्स ( स्तर ) की संख्या बड़ी है: 10,000।
क्या Rprof()
ज्यादातर समय कॉल में व्यतीत होता है sortedmatch(levels(i[[lc]]), levels(x[[rc]])
? यह वास्तव में स्वयं (एल्गोरिथ्म) में शामिल नहीं है, लेकिन एक प्रारंभिक कदम है।
हाल के प्रयास चाबियों के चरित्र स्तंभों को अनुमति देने में चले गए हैं, जो कि आर के अपने वैश्विक स्ट्रिंग हैश तालिका के साथ अधिक बारीकी से एकीकृत करके उस मुद्दे को हल करना चाहिए। कुछ बेंचमार्क परिणाम पहले से ही बताए जाते हैं test.data.table()
लेकिन उस स्तर को मिलान स्तर तक प्रतिस्थापित करने के लिए अभी तक कोड नहीं डाला गया है।
क्या data.table
नियमित पूर्णांक स्तंभों की तुलना में पांडा तेजी से विलीन होते हैं? यह एल्गोरिथ्म बनाम कारक मुद्दों को अलग करने का एक तरीका होना चाहिए।
इसके अलावा, data.table
है समय श्रृंखला मर्ज मन में। इसके दो पहलू: i) बहु स्तंभ आदेशित कुंजियों जैसे (आईडी, डेटाइम) ii) तेजी से प्रचलित जुड़ने ( roll=TRUE
) उर्फ अंतिम अवलोकन को आगे बढ़ाते हैं।
मुझे यह पुष्टि करने के लिए कुछ समय की आवश्यकता होगी क्योंकि यह पहली बार है जब मैंने data.table
प्रस्तुत की तुलना में देखा है ।
जुलाई 2012 को जारी डेटाटेबल v1.8.0 से अद्यतन
- आंतरिक फ़ंक्शन सॉर्टेमैच () को हटा दिया गया और chmatch () के साथ बदल दिया गया जब मैं टाइप 'कारक' के स्तंभों के लिए x स्तरों से मिलान करता हूं। यह प्रारंभिक कदम एक (ज्ञात) महत्वपूर्ण मंदी का कारण बन रहा था जब एक कारक स्तंभ के स्तरों की संख्या बड़ी थी (उदाहरण> 10,000)। वेस मैकिन्नी (पाइथन पैकेज पंडों के लेखक) द्वारा प्रदर्शित चार ऐसे स्तंभों में शामिल होने के परीक्षणों में शामिल हैं। उदाहरण के लिए, जिनमें से 600,000 अद्वितीय हैं, की 1 मिलियन स्ट्रिंग्स का मिलान अब उदाहरण के लिए 16 से 0.5 तक कम हो गया है।
उस रिलीज में भी था:
चरित्र स्तंभ अब कुंजियों में अनुमत हैं और कारक के लिए पसंद किए जाते हैं। data.table () और setkey () अब कारक के लिए मोटे चरित्र नहीं है। कारक अभी भी समर्थित हैं। एफआर # 1493, एफआर # 1224 और (आंशिक रूप से) एफआर # 951।
नए कार्य chmatch () और% chin%, मैच के तेज संस्करण () और वर्ण वैक्टर के लिए% में% हैं। आर के आंतरिक स्ट्रिंग कैश का उपयोग किया जाता है (कोई हैश तालिका नहीं बनाई गई है)। वे chmatch में उदाहरण पर मैच () से लगभग 4 गुना तेज़ हैं।
2013 सितम्बर के अनुसार डेटा टेंबल CRAN पर v1.8.10 है और हम v1.9.0 पर काम कर रहे हैं। NEWS को लाइव अपडेट किया गया है।
लेकिन जैसा कि मैंने मूल रूप से, ऊपर लिखा था:
data.table
है समय श्रृंखला विलय मन में। इसके दो पहलू: i) बहु स्तंभ आदेशित कुंजियों जैसे (आईडी, डेटाइम) ii) तेजी से प्रचलित जुड़ने ( roll=TRUE
) उर्फ अंतिम अवलोकन को आगे बढ़ाते हैं।
तो पंडों के समान दो वर्ण स्तंभों का जुड़ना संभवत: अभी भी डेटा से अधिक तेज है। चूंकि ऐसा लगता है कि यह संयुक्त दो कॉलमों को धोता है। data.table हैश की कुंजी नहीं है क्योंकि यह प्रचलित है जो दिमाग में शामिल होने का आदेश देता है। Data.table में एक "की" का शाब्दिक अर्थ केवल क्रमबद्ध क्रम है (SQL में क्लस्टर किए गए अनुक्रमणिका के समान); अर्थात, यह है कि डेटा RAM में कैसे ऑर्डर किया गया है)। उदाहरण के लिए, सूची में द्वितीयक कुंजियाँ जोड़ना है।
सारांश में, 10,000 से अधिक अद्वितीय तारों के साथ इस विशेष दो-चरित्र-स्तंभ परीक्षण द्वारा उजागर की गई चमक गति अंतर अब उतना बुरा नहीं होना चाहिए, क्योंकि ज्ञात समस्या ठीक हो गई है।
data.table
सिर्फ विरासत में मिला हैdata.frame
, लेकिन यह हुड के तहत सी-कोड पर निर्भर करता है।