2011-04-21 23 views
88

क्या आर(प्लस बराबर) या ++ (प्लस प्लस) की अवधारणा है क्योंकि सी ++/सी #/अन्य लोग करते हैं?आर: + = (प्लस बराबर) और ++ (प्लस प्लस) सी ++/सी #/जावा इत्यादि के बराबर है?

+3

नहीं है, 'x + = 1' या' x ++ 'करने के लिए -' x = x + 1' काम करता है। –

उत्तर

66

घटती नहीं, यह, नहीं देखता: R Language Definition: Operators

+0

और, यदि आप उनका उपयोग कर रहे हैं, तो यह कुछ अजीब त्रुटियों को फेंक देगा ... – skyin

11

वृद्धि और से 10.

require(Hmisc) 
inc(x) <- 10 

dec(x) <- 10 
+0

ये फ़ंक्शन संस्करण 4.1.0 के रूप में 'Hmisc' से हटा दिए गए प्रतीत होते हैं। – llasram

27

आर increment operator की एक अवधारणा नहीं है (उदाहरण के लिए ++ के रूप में सी में)। हालांकि, यह एक अपने आप को लागू करने के लिए, उदाहरण के लिए मुश्किल नहीं है:

inc <- function(x) 
{ 
eval.parent(substitute(x <- x + 1)) 
} 

उस मामले में आप

x <- 10 
inc(x) 

हालांकि कहेंगे, यह समारोह कॉल उपरि का परिचय है, तो यह धीमीx <- x + 1 टाइप करने के अलावा है स्वयं। अगर मुझे increment operator को गलती नहीं मिली है तो कंपाइलर के लिए नौकरी आसान बनाने के लिए पेश किया गया था, क्योंकि यह कोड को उन मशीन भाषा निर्देशों में सीधे रूपांतरित कर सकता था।

+1

यह फ़ंक्शन मान वापस नहीं कर सकता है और फिर पोस्टिनक्रिकमेंट ++ की तरह वृद्धि कर सकता है। यह + = या preincrement ++ के समान है। – Megatron

11

आर में इन परिचालन नहीं हैं क्योंकि आर में अधिकांश (वस्तुएं) वस्तुएं अपरिवर्तनीय हैं। वे नहीं बदलते हैं। आम तौर पर, जब ऐसा लगता है कि आप किसी ऑब्जेक्ट को संशोधित कर रहे हैं, तो आप वास्तव में एक प्रतिलिपि बना रहे हैं।

+10

जबकि अपरिवर्तनीयता वस्तुओं के लिए एक महान/वांछनीय संपत्ति है (पढ़ें: कम बग) मुझे नहीं लगता कि अपरिवर्तनीयता + = प्रश्न से संबंधित है। अन्य भाषाओं में + = अपरिवर्तनीय प्रकारों (जैसे .net में तारों) पर लागू किया जा सकता है। ऑपरेशन बस एक नई वस्तु बनाता है और दिए गए चर को उस नई वस्तु को असाइन करता है। अपरिवर्तनीयता बनाए रखा जाता है और चर अद्यतन किया जाता है। – SFun28

+3

अच्छा बिंदु। अपरिवर्तनीयता निश्चित रूप से इस प्रकार के ऑपरेशन को कम प्राकृतिक बनाती है, हालांकि। – hadley

44

@ GregaKešpret आप एक इन्फ़िक्स ऑपरेटर कर सकते हैं के बाद:

`%+=%` = function(e1,e2) eval.parent(substitute(e1 <- e1 + e2)) 
x = 1 
x %+=% 2 ; x