উত্তর:
না, এটি দেখেনি: আর ভাষার সংজ্ঞা: অপারেটর
@ গ্রেগাকি'র অনুসরণ করে আপনি ইনফিক্স অপারেটর তৈরি করতে পারেন:
`%+=%` = function(e1,e2) eval.parent(substitute(e1 <- e1 + e2))
x = 1
x %+=% 2 ; x
x = %+=% y/2
আয় x = (x + y)/2
। প্রথম বন্ধনী যুক্ত করা, অর্থাৎ x = %+=% (y/2)
সমস্যা সমাধান করে।
আর এর ধারণা নেই increment operator
(যেমন সি +++ এর মধ্যে)। তবে, নিজেকে বাস্তবায়ন করা কঠিন নয়, উদাহরণস্বরূপ:
inc <- function(x)
{
eval.parent(substitute(x <- x + 1))
}
সেক্ষেত্রে আপনি ফোন করবেন
x <- 10
inc(x)
তবে এটি ফাংশন কল ওভারহেডের সাথে পরিচয় করিয়ে দেয় তাই এটি নিজের টাইপ করার চেয়ে ধীরx <- x + 1
। আমার যদি ভুল না হয় তবে increment operator
সহজেই সংকলকের জন্য কাজ করার জন্য প্রবর্তন করা হয়েছিল, কারণ এটি কোডটি সরাসরি সেই মেশিন ভাষার নির্দেশিকায় রূপান্তর করতে পারে।
INC
নির্দেশনা প্রবর্তন করা হয়েছিল (সিএফ। ইন্টেল সফ্টওয়্যার বিকাশকারীর ম্যানুয়াল)। আমি উত্তর আপডেট করব।
আর-এর এই ক্রিয়াকলাপগুলি নেই কারণ আর (বেশিরভাগ) অবজেক্টগুলি অপরিবর্তনীয়। তারা পরিবর্তন হয় না। সাধারণত, যখন মনে হয় আপনি কোনও জিনিসকে সংশোধন করছেন, আপনি আসলে একটি অনুলিপি পরিবর্তন করছেন।
এই ধরণের জিনিসটিতে সহায়তা করার জন্য আমরা একটি প্যাকেজ, রোপারেটর প্রকাশ করেছি। আপনি এ সম্পর্কে এখানে আরও পড়তে পারেন: https://happylittlescriptts.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
আমরা ওভাররাইড করতে পারি +
। যদি অ্যানারি +
ব্যবহৃত হয় এবং এর যুক্তি নিজেই একটি অ্যানারি +
কল হয়, তবে কলিং পরিবেশে প্রাসঙ্গিক চলক বৃদ্ধি করুন।
`+` <- 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
কাজ করে।