जवाबों:
नहीं, यह नहीं है, देखें: आर भाषा परिभाषा: ऑपरेटर्स
@ GregaKešpret के बाद आप एक infix ऑपरेटर बना सकते हैं:
`%+=%` = function(e1,e2) eval.parent(substitute(e1 <- e1 + e2))
x = 1
x %+=% 2 ; x
x = %+=% y/2
रिटर्न x = (x + y)/2
। कोष्ठक जोड़ना यानी x = %+=% (y/2)
समस्या का हल।
R की अवधारणा नहीं है increment operator
(उदाहरण के लिए C में ++)। हालांकि, अपने आप को लागू करना मुश्किल नहीं है, उदाहरण के लिए:
inc <- function(x)
{
eval.parent(substitute(x <- x + 1))
}
उस स्थिति में आप फोन करेंगे
x <- 10
inc(x)
हालाँकि, यह फंक्शन कॉल ओवरहेड का परिचय देता है, इसलिए यह अपने आप को टाइप करने की तुलना में धीमा है x <- x + 1
। यदि मुझे गलत नहीं लगता increment operator
है तो संकलक के लिए काम करना आसान बना दिया गया, क्योंकि यह कोड को सीधे मशीन भाषा के निर्देशों में बदल सकता था।
INC
निर्देश दिया गया था (cf. इंटेल सॉफ्टवेयर डेवलपर मैनुअल)। मैं जवाब अपडेट कर दूंगा।
R में ये कार्य नहीं हैं क्योंकि (R में) अधिकांश वस्तुएँ अपरिवर्तनीय हैं। वे नहीं बदलते। आमतौर पर, जब ऐसा लगता है कि आप किसी वस्तु को संशोधित कर रहे हैं, तो आप वास्तव में एक प्रति संशोधित कर रहे हैं।
हमने इस तरह की चीज़ों की मदद के लिए एक पैकेज, रैपर, जारी किया। आप इसके बारे में और अधिक यहाँ पढ़ सकते हैं: https://happylittlescripts.blogspot.com/2018/09/make-your-r-code-nicer-with-roperators.html
install.packages('roperators')
require(roperators)
x <- 1:3
x %+=% 1; x
x %-=% 3; x
y <- c('a', 'b', 'c')
y %+=% 'text'; y
y %-=% 'text'; y
# etc
हम ओवरराइड कर सकते हैं +
। यदि unary +
का उपयोग किया जाता है और इसका तर्क स्वयं एक unary +
call है, तो कॉलिंग परिवेश में संबंधित चर को बढ़ाएँ।
`+` <- function(e1,e2){
# if unary `+`, keep original behavior
if(missing(e2)) {
s_e1 <- substitute(e1)
# if e1 (the argument of unary +) is itself an unary `+` operation
if(length(s_e1) == 2 &&
identical(s_e1[[1]], quote(`+`)) &&
length(s_e1[[2]]) == 1){
# increment value in parent environment
eval.parent(substitute(e1 <- e1 + 1,list(e1 = s_e1[[2]])))
# else unary `+` should just return it's input
} else e1
# if binary `+`, keep original behavior
} else .Primitive("+")(e1,e2)
}
x <- 10
++x
x
# [1] 11
अन्य ऑपरेशन नहीं बदलते हैं:
x + 2
# [1] 13
x ++ 2
# [1] 13
+x
# [1] 11
x
# [1] 11
हालांकि यह मत करो क्योंकि आप सब कुछ धीमा कर देंगे। या इसे किसी अन्य वातावरण में करें और सुनिश्चित करें कि आपके पास इन निर्देशों पर बड़े लूप नहीं हैं।
आप यह भी कर सकते हैं:
`++` <- function(x) eval.parent(substitute(x <-x +1))
a <- 1
`++`(a)
a
# [1] 2
ऐसा करने का एक और तरीका है, जो मुझे बहुत आसान लगता है, शायद कुछ मदद हो सकती है
मैं <<-
इन परिस्थितियों के लिए उपयोग करता हूं । ऑपरेटर <<-
मूल वातावरण के लिए मान प्रदान करते हैं
inc <- function(x)
{
x <<- x + 1
}
और आप इसे पसंद कर सकते हैं
x <- 0
inc(x)
x += 1
याx++
-x = x + 1
काम करता है।