अद्यतन मार्च 2014
इस एक के बारे में कुछ बहस हुई है। V1.9.2 के रूप में हम अब सी 0 लोकेल का उपयोग करके setkey
सॉर्टिंग पर बस गए हैं; उदाहरण के लिए, उपयोगकर्ता के लोकेल के बावजूद, सभी पूंजी पत्र सभी निचले केस अक्षरों से पहले आते हैं। यह v1.8.8 में किया गया एक बदलाव था जिसे हम रिवर्स करना चाहते थे लेकिन अभी के लिए अटक गए हैं।
save()
पर विचार करें- अपने लोकेल में एक कुंजी वाली तालिका और एक सहकर्मी load()
- इसे एक अलग लोकेल में रखें। जब वे उस तालिका में शामिल होते हैं तो यह लोकल क्रमबद्ध क्रम में सही ढंग से काम नहीं कर सकता है। setkey
स्थानीय स्तर पर ऑर्डर करने के साथ लोकेल नाम को सहेजने की अनुमति देने के लिए हमें थोड़ा और सावधानी से सोचना है, इसलिए data.table
कम से कम तुलना कर सकते हैं और पता लगा सकते हैं कि वर्तमान लोकेल उस दौड़ के लिए अलग है या नहीं setkey
।
यह गति कारणों के लिए भी है क्योंकि लोकेल के अनुसार सॉर्टिंग सी लोकेल की तुलना में बहुत धीमी है। हालांकि, हम इसे यथासंभव कुशलतापूर्वक कर सकते हैं और वैकल्पिक रूप से आदर्श होने की अनुमति दे सकते हैं।
इसलिए, अब यह एक सुविधा अनुरोध है और आगे की टिप्पणियों का बहुत स्वागत है।
FR#4842 setkey to sort using session's locale not C locale
अच्छा पकड़! बदले में setkey
पर कॉल setkeyv
पर कॉल करता है और कॉलम/प्रविष्टियों को "ऑर्डर" करने के लिए fastorder
पर कॉल करता है जो बदले में chorder
पर कॉल करता है।
chorder
बदले में एक सी फ़ंक्शन Ccountingcharacter.c
कॉल करता है। अब, मुझे लगता है कि समस्या "लोकेल" के कारण आती है।
चलो देखते हैं कि मैं अपने मैक पर "लोकेल" क्या हूं।
x <- c("USA", "Ubuntu", "Uzbekistan")
order(x)
# [1] 2 1 3
अब, चलो "स्थान" के लिए 'सी' को बदलने:
Sys.getLocale()
# [1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"
अब देखते हैं कैसे order
प्रकार यह करते हैं।
Sys.setlocale("LC_ALL", "C")
# [1] "C/C/C/C/C/en_US.UTF-8"
order(x)
# [1] 1 2 3
?order
से:
चरित्र वैक्टर के लिए सॉर्ट क्रम प्रयोग में वातावरण की collating अनुक्रम पर निर्भर करेगा: Comparison
देखते हैं।
?Comparison
से:
चरित्र वैक्टर में तार की तुलना में उपयोग में स्थान की collating अनुक्रम का उपयोग तार के भीतर कोषगत है: स्थानों देखते हैं। En_US जैसे स्थानीय लोगों का कोलाटिंग अनुक्रम सामान्य रूप से सी से अलग होता है (जिसे ASCII का उपयोग करना चाहिए) और आश्चर्यजनक हो सकता है। संयोजन आदेश के बारे में कोई धारणा बनाने से सावधान रहें: उदा। जेड के बाद, एक भी पत्र के रूप में डेनिश आ प्रकार में ....
तो, मूल रूप से, order
रूप में अच्छी तरह के तहत "- में एस्टोनियाई जेड एस और टी के बीच आता है, और मिलान जरूरी चरित्र-दर-चरित्र नहीं है सी "लोकेल, data.table
के setkey
के समान आदेश देता है। मेरा अनुमान है कि chorder
द्वारा बुलाया गया सी-फ़ंक्शन स्वचालित रूप से सी-लोकेल पर चलता है जो "एस" से पहले "एस" आने से पहले एसीआई मानों की तुलना करेगा।
यह संभवतः @ मैथ्यूडॉवेल के ध्यान में लाने के लिए महत्वपूर्ण है (यदि वह पहले से ही इसके बारे में नहीं जानता है)। तो, मैं सुझाव दूंगा कि आप इसे here (बस सुनिश्चित करने के लिए) के रूप में फ़ाइल करें।
आपका ओएस क्या है? – GSee
मेरा ओएस विंडोज 7 – jem77bfp