डेटाटेबल ने: = ऑपरेटर पेश किया है। < ओवरलोड क्यों नहीं करें?डेटा.table परिभाषित क्यों किया गया है: = ओवरलोडिंग के बजाय <-?
उत्तर
मुझे नहीं लगता कि यह आवश्यक होना चाहिए, निम्नलिखित कारणों से: :=
केवल [...]
के अंदर उपयोग किया जाता है, इसलिए इसे हमेशा उद्धृत किया जाता है। [...]
अभिव्यक्ति वृक्ष के माध्यम से यह देखने के लिए जाता है कि :=
इसमें है या नहीं।
इसका मतलब है कि यह वास्तव में ऑपरेटर के रूप में कार्य नहीं कर रहा है और यह वास्तव में अधिभारित नहीं है; इसलिए वे अपने इच्छित ऑपरेटर को बहुत ज्यादा चुन सकते थे। मुझे लगता है कि यह बेहतर लग रहा था? या कम भ्रमित क्योंकि यह स्पष्ट रूप से <-
नहीं है?
(ध्यान दें कि यदि :=
[...]
की बाहर इस्तेमाल किया गया यह <-
नहीं किया जा सका, क्योंकि आप वास्तव में <-
नहीं ओवरलोड कर सकते हैं। <-
अपनी बाईं तर्क का मूल्यांकन नहीं करता है तो यह पता नहीं है कि किस प्रकार है) ।
हां, यह बहुत अधिक है। हमने कोशिश की <- वास्तव में पहले लेकिन वह उड़ नहीं गया क्योंकि उपयोगकर्ता कोड पहले ही इस्तेमाल किया गया है <- j में उदा। एक समूह काउंटर में वृद्धि। फिर हमने कोशिश की << - लेकिन लोग पहले से ही j में भी इसका उपयोग करते हैं, ताकि WebobalEnv को असाइन किया जा सके। तो फिर हम पर मारा: =। –
दो स्थानों है कि <-
सकता है 'अतिभारित' जा रहे हैं:
x[i, j] <- value # 1
x[i, {colname <- value}] # 2
पहले एक प्रतियां x
के पूरे *tmp*
को, बदल जाता है कि काम कर प्रतिलिपि, और x
वापस करने के लिए प्रदान करती है। यह एक आर चीज है (src/main/eval.c और subassign.c) हाल ही में आर-डेवेल here पर चर्चा की गई। ऐसा लगता है कि *tmp*
पर उस प्रतिलिपि से बचने के लिए, पैकेज को या आर स्वयं को अनुमति देने के लिए आर को बदलना संभव हो सकता है, लेकिन वर्तमान में यह संभव नहीं है, IIUC।
दूसरा, ओवेन का जवाब क्या है, मुझे लगता है। यदि आप स्वीकार करते हैं कि j
के भीतर संदर्भ द्वारा असाइनमेंट करना ठीक है, तो कौन सा ऑपरेटर? ओवेन के जवाब पर टिप्पणी के अनुसार, <-
और <<-
पहले से ही j
में उपयोगकर्ताओं द्वारा उपयोग किए जाते हैं, इसलिए हम :=
पर हिट करते हैं।
भी [<-
अगर x
की पूरी नकल नहीं था, हम अभी भी चाहते j
में :=
तो हम इस तरह कर सकते हैं:
DT[,{newcol1:=sum(a)
newcol2:=a/newcol1}, by=group]
कहाँ नए कॉलम तालिका के संदर्भ द्वारा जोड़ रहे हैं, और प्रत्येक समूह के प्रत्येक :=
का आरएचएस मूल्यांकन किया जाता है। (जब:। समूह के भीतर = कार्यान्वित किया जाता है)
अद्यतन अक्टू 2012
के रूप में 1.8.2 (क्रैन पर जुला 2012 में), :=
समूह से जोड़ने या अद्यतन करने के लिए लागू किया गया था एकल कॉलम; यानी, :=
का एकल एलएचएस। और अब v1.8.3 में (लिखने के समय आर-फोर्ज पर), समूह द्वारा कई कॉलम जोड़े जा सकते हैं; जैसे,
DT[, c("newcol1","newcol2") := .(sum(a),sum(b)), by=group]
या, शायद अधिक सुंदर ढंग से:
DT[,`:=`(newcol1=sum(a),
newcol2=sum(b)), by=group]
लेकिन पुनरावृत्ति कई आरएचएस, थोड़ी देर है, जहां 2 अभिव्यक्ति पहले से परिणाम के लिए इस्तेमाल कर सकते हैं की परिकल्पना की गई, लागू नहीं है अभी तक (FR#1492)। तो यह अभी भी एक त्रुटि "newcol1 not found"
देने के लिए और दो चरणों में किया जा करने की आवश्यकता होगी:
DT[,`:=`(newcol1=sum(a),
newcol2=a/newcol1), by=group]
बस एक मामूली बात, 'x [i, j] <- value' वास्तव में' <-' 'को अधिभारित नहीं कर रहा है, बल्कि' <-' जो करता है वह हमेशा करता है '[<-' (अभिव्यक्ति के आधार पर) , मूल्य प्रकार नहीं)। – Owen
@ ओवेन आह हाँ, अच्छा बिंदु। 'अधिभारित' के आसपास उद्धरण और उद्धरण जोड़ा है। –
- 1. ऑटो_प्टर <T> ऑपरेटर क्यों नहीं है!() परिभाषित किया गया है?
- 2. Enum.values () परिभाषित किया गया है?
- 3. sqlconnection को परिभाषित नहीं किया गया है
- 4. ऐस संपादक "परिभाषित परिभाषित नहीं किया गया है"
- 5. ऑपरेटर << ओवरलोडिंग ओस्ट्रीम
- 6. क्यों sockaddr_storage संरचना परिभाषित तरीके के रूप में परिभाषित किया गया है?
- 7. क्या मैं = 0, ++ परिभाषित किया गया है?
- 8. प्लॉट परिभाषित नहीं किया गया है
- 9. getActivity() जहां इसे परिभाषित किया गया है?
- 10. Magento UploaderJsObject परिभाषित नहीं किया गया है
- 11. एनएससीओनक्टाडेटा क्या है, और इसे कहां परिभाषित किया गया है?
- 12. glGenBuffers परिभाषित नहीं किया गया है?
- 13. फ़ंक्शन परिभाषित किया गया है लेकिन सी
- 14. ईजेएस आंशिक परिभाषित नहीं किया गया है '
- 15. आकार (बूल) परिभाषित किया गया है?
- 16. DEBUG मैक्रो परिभाषित किया गया है?
- 17. ओवरलोडिंग ऑपरेटर << सरणियों के लिए
- 18. ओवरलोडिंग ऑपरेटर << - सी ++
- 19. ओवरलोडिंग << ऑपरेटरों और विरासत कक्षाएं
- 20. <? के बजाय php <?
- 21. ऑब्जेक्ट में बराबर और हैशकोड परिभाषित क्यों किया गया था?
- 22. ओवरलोडिंग :: समारोह <...>
- 23. अपवाद क्यों ट्रिगर नहीं किया गया है?
- 24. डेटा.table
- 25. यह बफर एक लूप के अंदर क्यों परिभाषित किया गया है?
- 26. डेटा.table
- 27. $ अपवाद को "स्थानीय" में परिभाषित किया गया है
- 28. MATLAB: फ़ील्डनाम के आदेश को परिभाषित किया गया है?
- 29. कक्षा आयातित होने के बावजूद परिभाषित नहीं किया गया है
- 30. समानांतर कोड के लिए स्केलेबिलिटी कैसे परिभाषित किया गया है?
मुझे लगता है कि दो: श्रद्धांजलि में पास्कल के लिए !!! – Iterator
मुझे लगता है! हम किसी भी ऑपरेटर का चयन नहीं कर सके, यह केवल (सौभाग्य से) आर अनुमति देता है: = परिभाषित किया जाना चाहिए। अन्यथा हम मज़ेदार और परिभाषित कर सकते हैं + =, - =, ~ = आदि :) –
क्या कोई व्यक्ति कृपया "ओवरलोडिंग <-" का अर्थ बता सकता है? – Michael