2010-02-16 31 views
83

संभव डुप्लिकेट:
Assignment operators in R: '=' and '<-'आर में `=` और `<-` के बीच क्या अंतर है?

मैं आर 2.8.1 का उपयोग कर रहा है और यह चर काम ऑपरेटर के रूप में दोनों = और <- उपयोग करना संभव है। उनके बीच क्या अंतर है? मुझे किसका उपयोग करना चाहिए?

उत्तर

49
here से

:

ऑपरेटरों < - और = वातावरण में वे मूल्यांकन किया जाता है में निर्दिष्ट करते हैं। ऑपरेटर < - कहीं भी इस्तेमाल किया जा सकता है, जबकि ऑपरेटर = केवल शीर्ष स्तर पर (जैसे, कमांड प्रॉम्प्ट पर टाइप की गई पूर्ण अभिव्यक्ति में) या अभिव्यक्तियों की एक ब्रैस्ड सूची में उप-अभिव्यक्तियों में से एक के रूप में अनुमति दी जाती है।

+5

के रूप में' <-' कहीं भी इस्तेमाल किया जा सकता, इसका मतलब यह है कि वहाँ कोई। '='? –

+26

का उपयोग करने की आवश्यकता नहीं है, वैश्विक स्तर पर असाइन करने से बचने के लिए फ़ंक्शंस को कॉल करते समय आपको अभी भी '=' का उपयोग करने की आवश्यकता है। इन उदाहरणों को देखें: http://www.mayin.org/ajayshah/KB/R/html /b1.html। यदि आपने 'name <-" पेपैल "का उपयोग किया है, तो x <-2, ... 'यह शीर्ष स्तर पर' x' सेट करेगा। उस उदाहरण को चलाने का प्रयास करें, लेकिन '= के बजाय' <-' लिखना 'और देखें कि क्या होता है। –

13

, से "आर के साथ मोंटे कार्लो के तरीके का परिचय" पढ़ना रॉबर्ट और Casella द्वारा:

"असाइनमेंट ऑपरेटर, = है ==, जो समानता के लिए बूलियन ऑपरेटर है के साथ भ्रमित होने की नहीं एक पुराना। असाइनमेंट ऑपरेटर <- है और, संगतता कारणों के लिए, यह अभी भी कार्यात्मक बना हुआ है, लेकिन इसे क्लीनर प्रोग्रामिंग सुनिश्चित करने के लिए अनदेखा किया जाना चाहिए। (जैसा कि स्पेक्ट्रर, पी। (200 9) द्वारा इंगित किया गया है। 'डेटा मैनिपुलेशन आर' - धारा 8.7।, एक अपवाद तब होता है जब system.time का उपयोग किया जाता है, तब से = फिर कीवर्ड की पहचान करने के लिए उपयोग किया जाता है)

असाइनमेंट ऑपरेटर < का एक भ्रामक सुविधा - इस तरह के

> if (x[1]<-2) ... 

जो परीक्षण करने के लिए किया जाए या नहीं x [1] की तुलना में कम है -2 चाहिए लेकिन अप करने के लिए 2 आवंटन समाप्त होता है के रूप में भाव बूलियन में पाया जाता है एक्स [1], अपने वर्तमान मूल्य मिटा रहा है! यह भी ध्यान रखें कि

> if (x[1]=-2) ... 

गलती के बजाय का उपयोग कर (एक्स [1] == - 2) एक ही परिणाम है "

+0

मुझे यह भी लगता है कि' वैश्विक असाइनमेंट ', जो कुछ भी करने की ज़रूरत है, केवल "(हो जाता है" आधारित)' << - 'ऑपरेटर का उपयोग करके किया जा सकता है, और यह भी है कि एक "बराबर" आधारित समकक्ष नहीं है। –

+6

Google की आर स्टाइल गाइड विपरीत कहती है: http://google-styleguide.googlecode.com/svn/trunk/google-r-style.html#assignment –

+0

'if (x [1] = - 2) 'आसानी से प्रतिबंधित है इस तरह की त्रुटि को रोकने के लिए। विशेष रूप से, ऑपरेटर '=' केवल शीर्ष स्तर पर ही अनुमति दी जाती है। – Aaron

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