मेरे पास एक डेटा.table है जिसमें दो कुंजी हैं: वर्ष (10 स्तर) और सदस्य आईडी (200,000 स्तर)। जब मैं सेटकी करता हूं, setkey(MemberID, Year)
परिणामस्वरूप विभिन्न प्रदर्शन setkey(Year, MemberID)
के साथ तुलना करता है? यदि हां, तो कौन सा तरीका बेहतर होगा?डेटाटेबल मामले में चाबियों का क्रम क्या है?
उत्तर
कुंजी सेटिंग का प्रदर्शन और गति कुंजी परिवर्तनीय प्रकारों पर निर्भर करेगी। numeric
कॉलम integer
से धीमे हो जाएंगे। character
कॉलम (जब छोटे तार) तेजी से दिखाई देते हैं।
जैसे
library(data.table)
set.seed(1)
DIC <- data.table(year = sample(seq_len(10), 5e6, TRUE), id = sample(as.character(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6))
DIC2 <- copy(DIC)
DIF <- data.table(year = sample(seq_len(10), 5e6, TRUE), id = sample(as.factor(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6))
DIF2 <- copy(DIF)
DNC <- data.table(year = sample(as.numeric(seq_len(10)), 5e6, TRUE), id = sample(as.character(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6))
DNC2 <- copy(DNC)
DCC <- data.table(year = sample(as.character(seq_len(10)), 5e6, TRUE), id = sample(as.character(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6))
DCC2 <- copy(DCC)
DII <- data.table(year = sample(seq_len(10), 5e6, TRUE), id = sample(seq_len(2e5), 5e6, TRUE), z = rnorm(5e6))
DII2 <- copy(DII)
कुछ समय
# key of integer, character columns
system.time(setkey(DIC, year ,id))
user system elapsed
3.21 0.11 3.31
system.time(setkey(DIC2, id, year))
user system elapsed
3.43 0.03 3.45
# key of integer factor columns
system.time(setkey(DIF, year ,id))
user system elapsed
6.31 0.05 6.37
system.time(setkey(DIF2, id, year))
user system elapsed
6.44 0.06 6.54
# key of numeric, character columns
system.time(setkey(DNC, year ,id))
user system elapsed
9.91 0.07 10.29
system.time(setkey(DNC2, id, year))
user system elapsed
10.11 0.07 10.34
# key of two character columns
system.time(setkey(DCC, year ,id))
user system elapsed
3.34 0.05 3.40
system.time(setkey(DCC2, id, year))
user system elapsed
3.40 0.02 3.42
# key of two integer columns
system.time(setkey(DII, year ,id))
user system elapsed
6.25 0.02 6.53
system.time(setkey(DII2, id,year))
user system elapsed
6.44 0.05 6.64
जो करने के लिए के रूप में जिस तरह से बेहतर होगा। यह संभवतः उस पर निर्भर करेगा जो आपको अधिक बार अकेले सब्सक्राइब करने की संभावना है।
उदाहरण के लिए, आप आप year, id
के रूप में कुंजी निर्धारित किया है तो आप
D[J(1)]
उपयोग कर सकते हैं, लेकिन कुंजी id, year
के रूप में स्थापित किया गया था, तो अगर साल 1.
के लिए सभी डेटा प्राप्त करने के लिए आवश्यकता हो सकती है तो आप
D[J(unique(id),1), nomatch = 0]
की आवश्यकता होगी जो अधिक टाइपिंग है और के रूप में यह unique(id)
गणना करने के लिए है लंबा समय लगेगा।
एक सुविधा अनुरोध FR#1007 है जो द्वितीयक कुंजी की अनुमति देता है, लेकिन यह अभी तक लागू नहीं किया गया है। वर्तमान में एक भी कुंजी है जो एक से अधिक कॉलम पर कब्जा कर सकती है।
- 1. इस मामले में "&" का क्या अर्थ है?
- 2. वृक्ष मानचित्र में 'प्राकृतिक क्रम' क्या है?
- 3. जॉइन मामले के ऑन क्लॉज में संदर्भित टेबल का क्रम क्या है?
- 4. एसक्यूएल सर्वर: पूर्ण बाहरी मामले में आदेश का आदेश है?
- 5. प्रदर्शन के मामले में बेहतर क्या है?
- 6. अनुक्रम के मामले में स्थिति क्या है?
- 7. jQuery और डेटाटेबल के साथ संख्यात्मक क्रम कैसे लगाया जाए?
- 8. क्या LibSVM फीचर वैक्टर में विशेषताओं का क्रम महत्वपूर्ण है?
- 9. क्या PHP परिभाषा का क्रम PHP में मामला है?
- 10. क्या WHERE खंड में कॉलम का क्रम मायने रखता है?
- 11. क्या JSON सूची में तत्वों का क्रम संरक्षित है?
- 12. डेटाटेबल
- 13. मेमोरी में डेटा का क्रम
- 14. LINQ का चयन डेटाटेबल
- 15. डेटाटेबल
- 16. डेटाटेबल
- 17. Easymock: कैप्चर मामले का आदेश करता है?
- 18. क्या टीसीपी क्रम में आने की गारंटी है?
- 19. डेटाटेबल
- 20. डेटाटेबल
- 21. डेटाटेबल
- 22. डेटाटेबल
- 23. डेटाटेबल
- 24. डेटाटेबल
- 25. डेटाटेबल
- 26. डेटाटेबल
- 27. क्या foreach कथन क्रम में पुनरावृत्त करता है या यह यादृच्छिक क्रम हो सकता है?
- 28. डेटाटेबल
- 29. डेटाटेबल
- 30. डेटाटेबल
धन्यवाद बहुत, एमएलएल। – AdamNYC