2015-10-26 6 views
14

के रूप में देखें मैंने पढ़ा है कि आर में सबकुछ कार्य करता है। तो मुझे आश्चर्य है अगर "+" एक समारोह भी है और हम ऐसा ही कुछ लिख सकते हैं यदि:अंकगणितीय ऑपरेटरों को

xx <- c(1,2,3) 
yy <- c(1,2,3,4,5,6) 

# zz is the sum of the two lengths 
zz <- +(if(exists("xx")) length(xx), if(exists("yy")) length(yy)) 
+3

बस '+' – akrun

+5

'+' के बजाय 'sum' का उपयोग करें, वास्तव में एक ऐसा फ़ंक्शन है जिसे आपको टिक टिक जोड़ने की आवश्यकता है। –

+0

हालांकि, 'if (मौजूद()) के साथ आपका निर्माण' + 'फ़ंक्शन कॉल के अंदर अपेक्षा की तरह काम नहीं करता है। कोशिश करें कि क्या होता है यदि कोई चर मौजूद नहीं है। आप मूल रूप से कुछ '1 + NULL' जैसे कुछ करते हैं। – Roland

उत्तर

21

हाँ, आप कर सकते हैं:

xx <- c(1,2,3) 
yy <- c(1,2,3,4,5,6) 

# zz is the sum of the two lengths 
zz <- `+`(if(exists("xx")) length(xx), if(exists("yy")) length(yy)) 
#[1] 9 

वस्तुओं है कि वाक्य रचना मान्य नहीं है कॉल करने के लिए नाम आप बैकटिक (`) या उद्धरणों में नाम संलग्न करने (" या ') की जरूरत है (जैसे समारोह + परोक्ष कहा जाता हो जाता है कि यदि आप 1 + 2 की तरह कुछ करते हैं)।

भी देखें R Language Definition की धारा 3.1.4 :

Except for the syntax, there is no difference between applying an operator and calling a function. In fact, x + y can equivalently be written `+`(x, y). Notice that since ‘+’ is a non-standard function name, it needs to be quoted.

अपने कोड में आप त्रुटि मिलती है:

Error: unexpected ',' in "zz <- +(if(exists("xx")) length(xx)," 

इसका कारण यह है कि आप (बाइनरी) समारोह "+", लेकिन एकल ऑपरेटर +, जो समारोह तर्क उम्मीद नहीं है कॉल नहीं करते और इस प्रकार कोष्ठक को "अंकगणितीय" ऑपरेटर के रूप में व्याख्या करता है। उन लोगों के बीच एक अल्पविराम की अनुमति नहीं है।

+3

आप कर सकते हैं सिंगल या डबल कोट्स, '"+" (1, 1)' और '' + '(1, 1)' दोनों काम के साथ-साथ बैकटिक्स समाधान का भी उपयोग करें। – Gregor

+1

आपकी अंतिम वाक्य पर एक क्विबल: ऑपरेटर का कोई "अंदर" नहीं है। नियम यह है कि फ़ंक्शन तर्कों को अलग करने के अलावा * को छोड़कर कोई भी कॉमा अनुमति नहीं है *। – Frank

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