2015-09-28 8 views
13

आर स्रोत कोड (फ़ाइल R-3.2.2/src/main/gram.y लाइनों में खुदाई 28362852) को मैंने पाया आर पार्सर/tokenizer मानता है कि कि := एक LEFT_ASSIGNMENT टोकन है।आर असाइनमेंट ऑपरेटर क्या है: = के लिए?

लेकिन जब R.3.2.2 में एक असाइनमेंट ऑपरेटर के रूप में उपयोग करने के लिए,
की कोशिश कर रहा मैं एक (असंभव := ... के लिए समारोह को खोजने के लिए) त्रुटि है, लेकिन जैसा कि आप देख सकते हैं आर <- की तरह एक काम के रूप में यह मानता है:

> myVar := 42 
Erreur : impossible de trouver la fonction ":=" 
> := 
Erreur : unexpected assignment in ":=" 
> <- 
Erreur : unexpected assignment in "<-" 

यह एक बग है, या करता है टोकन := टोकनज़र स्रोत कोड से हटाए जाने की आवश्यकता है?

क्या आर में := ऑपरेटर के बारे में कोई पिछली कहानी है?

+2

': =' के अंदर एक बहुत आसान ऑपरेटर है 'data.table' , लेकिन जहां तक ​​मुझे पता है आर में (अभी तक?) नहीं। – daroczig

+2

असंबद्ध - अंग्रेजी में आर त्रुटि आउटपुट का आधा क्यों है? मुझे लगता है कि आपके पास फ्रांसीसी फ्रांसीसी सेट है। –

+0

संबंधित: http://stackoverflow.com/questions/7033106 http://stackoverflow.com/questions/26269423 – Frank

उत्तर

5

स्पष्टीकरण के लिए, R असाइनमेंट ऑपरेटर <- और = हैं।

?`<-` 

के बजाय <- अपने आदेश पंक्ति में:

प्रकार उनके बारे में जानकारी प्राप्त करने के लिए। पेरेंट वातावरण में परिवर्तनीय को प्रभावित करने वाले ऑपरेटर <<- भी मौजूद है।

:= के संबंध में, यह ऑपरेटर j ऑपरेटर data.table पैकेज में ऑपरेटर है। इसे defined as पढ़ा जा सकता है और केवल data.table ऑब्जेक्ट में उपयोग करने योग्य है। इसे दर्शाने के लिए हम b दूसरे कॉलम को संशोधित (मूल्य b साथ col2 परिभाषित) जब पहली col में मानों 1 के बराबर हैं:

library(data.table) 

dt = data.table(col1=c(1,2,1,2,3), col2 = letters[1:5]) 

dt[col1==1,col2:='b'] 

विस्तार स्पष्टीकरण के लिए:

?`:=` 

आशा है कि यह स्पष्ट करता है।

+0

मुझे लगता है कि पार्सर कोड में उन पंक्तियों का कारण है: '=' को परिभाषित किया जा सकता है। मुझे ऐसा कुछ याद रखना याद है, लेकिन भूल गया। शायद मैट या अरुण स्पष्ट कर सकते हैं। – Roland

+0

प्रभावशाली रूप से डेटा.table संकुल एक कस्टम ': =' फ़ंक्शन को परिभाषित करता है जो आर: पार्सर/टोकनेज़र में परिभाषित ': =' असाइनमेंट ऑपरेटर के फायदे लेता है लेकिन यह अनधिकृत रूप से आर भाषा में कहीं भी लिखा/लिखा नहीं गया है ... अगला प्रश्न: क्या यह वास्तव में सुरक्षित और भविष्य के सबूत है (और डेटाटेबल रखरखाव करने वालों के लिए ...) इस ': =' टोकन का उपयोग करने के लिए ??? क्या डेटाटेबल देवता आर कोर टीम से यह ': =' असाइनमेंट टोकन जोड़ने के लिए पूछती है? –

+0

@ रोमेन जैकोटिन यह बेहद असंभव है कि आर-कोर पार्सर को इस तरह से बदल देगा जो व्यापक रूप से उपयोग किए जाने वाले डेटाटेबल पैकेज को तोड़ देगा। वे पीछे की संगतता के बारे में बहुत सावधान हैं। – Roland

11

यह था एक पहले से अनुमति असाइनमेंट ऑपरेटर, में 2001.

आर के विकास संस्करण अब अनुमति देता है कुछ काम सी या जावा शैली लिखा होना, = ऑपरेटर का उपयोग जॉन चैंबर्स से this article देखना । इससे एस-प्लस के साथ संगतता बढ़ जाती है (साथ ही सी, जावा और कई अन्य भाषाओं के साथ)।

सभी पहले अनुमति असाइनमेंट ऑपरेटरों (< -,: =, _, और < < -) प्रभाव में पूरी तरह से रहते हैं।

ऐसा लगता है := समारोह नहीं रह गया है मौजूद है, लेकिन आप "को पुन: सक्षम यह" कर सकते हैं इस तरह:

`:=` <- `<-` 
x:=3 
x 
[1] 3 
+0

धन्यवाद जेम्स, यह अभी स्पष्ट है। –

+0

जेम्स, एफवाईआई ऐसा लगता है कि वर्तमान में '_' आर-3.2.2 पार्सर/टोकनेज़र द्वारा असाइनमेंट के रूप में नहीं देखा जाता है (केवल इसे प्रॉम्प्ट पर अकेला टाइप करें और आपके पास 'अप्रत्याशित इनपुट' होगा और 'अप्रत्याशित असाइनमेंट' नहीं होगा जैसा कि आपके पास अकेले टाइप करना होगा '<-' या ': =' या '<< -' –

+0

@RomainJacotin हां, अंडरस्कोर संस्करण 1.8.0 में असाइनमेंट ऑपरेटर के रूप में हटा दिया गया था, मुझे कोई उल्लेख नहीं मिला ': =' हालांकि। http://svn.r-project.org/R/trunk/doc/NEWS.1 – James

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