<- বর্তমান পরিবেশে অ্যাসাইনমেন্ট করে।
যখন আপনি কোনও ফাংশনের ভিতরে থাকবেন তখন আর আপনার জন্য একটি নতুন পরিবেশ তৈরি করে। ডিফল্টরূপে এটি যে পরিবেশে তৈরি হয়েছিল তার সমস্ত কিছু অন্তর্ভুক্ত করে তাই আপনি সেই পরিবর্তনশীলগুলিও ব্যবহার করতে পারেন তবে নতুন কিছু যা আপনি তৈরি করেন তা বৈশ্বিক পরিবেশে লেখা হবে না।
অধিকাংশ ক্ষেত্রে <<- বৈশ্বিক পরিবেশে ইতিমধ্যে ভেরিয়েবলগুলি অর্পণ করা হবে বা আপনি কোনও ফাংশনের অভ্যন্তরে থাকলেও বৈশ্বিক পরিবেশে একটি পরিবর্তনশীল তৈরি করবেন। যাইহোক, এটি যে হিসাবে খুব সহজ না। এটি যা করে তা হ'ল আগ্রহের নামের সাথে একটি ভেরিয়েবলের জন্য প্যারেন্ট পরিবেশকে পরীক্ষা করে। যদি এটি আপনার পিতামহুল পরিবেশে এটি খুঁজে না পায় তবে এটি পিতা-মাতৃ পরিবেশের পিতামাতার কাছে যায় (ফাংশনটি তৈরি করার সময়) এবং সেখানে দেখায়। এটি বৈশ্বিক পরিবেশে wardর্ধ্বমুখী অব্যাহত থাকে এবং এটি যদি বৈশ্বিক পরিবেশে খুঁজে না পাওয়া যায় তবে এটি বৈশ্বিক পরিবেশে পরিবর্তনশীল নির্ধারণ করবে।
এটি যা চলছে তা চিত্রিত করে।
bar <- "global"
foo <- function(){
bar <- "in foo"
baz <- function(){
bar <- "in baz - before <<-"
bar <<- "in baz - after <<-"
print(bar)
}
print(bar)
baz()
print(bar)
}
> bar
[1] "global"
> foo()
[1] "in foo"
[1] "in baz - before <<-"
[1] "in baz - after <<-"
> bar
[1] "global"
প্রথমবার আমরা বারটি প্রিন্ট করেছি আমরা fooএখনও কল করি নি তাই এটি এখনও বিশ্বব্যাপী হওয়া উচিত - এটি অর্থবোধ করে। দ্বিতীয়বার fooকল bazকরার আগে আমরা এর ভিতরে দ্বিতীয়বার মুদ্রণ করি যাতে "foo এ" মানটি বোঝায়। নিম্নলিখিতটি যেখানে আমরা দেখছি <<-আসলে কী করছে। পরবর্তী মান মুদ্রিত হয় "বাজে - << - এর আগে" যদিও মুদ্রণ বিবৃতিটি পরে আসে <<-। এটি কারণ <<-বর্তমান পরিবেশে সন্ধান করে না (যদি আপনি বিশ্বব্যাপী পরিবেশে না থাকেন তবে ক্ষেত্রে এটি <<-পছন্দ করে <-)। সুতরাং bazবারের মানটি "বাজে - << - এর আগে" হিসাবে থাকে। একবার যখন আমরা bazবারের অনুলিপিটি কল করি তখন foo"ইন বাজে" হয়ে যায় তবে আমরা দেখতে পাই যে বিশ্বব্যাপী barঅপরিবর্তিত রয়েছে।barভেতরে সংজ্ঞায়িত করা হয় যে fooপিতা বা মাতা পরিবেশে যখন আমরা তৈরি bazতাই এই প্রথম কপি barকরে <<-দেখেন এবং এইভাবে কপি এটি নির্ধারণ করা হয়। সুতরাং <<-সরাসরি বৈশ্বিক পরিবেশের জন্য বরাদ্দ নয়।
<<-জটিল এবং আপনি যদি এড়াতে পারেন তবে আমি এটি ব্যবহার করার পরামর্শ দেব না। আপনি যদি সত্যই বিশ্বব্যাপী পরিবেশে নির্ধারিত করতে চান তবে আপনি নির্ধারিত কার্যটি ব্যবহার করতে পারেন এবং এটি স্পষ্টভাবে বলতে পারেন যে আপনি বিশ্বব্যাপী বরাদ্দ করতে চান।
এখন আমি <<-একটি অ্যাসাইনমেন্ট বিবৃতিতে পরিবর্তন করেছি এবং আমরা দেখতে পাচ্ছি এর কী প্রভাব রয়েছে:
bar <- "global"
foo <- function(){
bar <- "in foo"
baz <- function(){
assign("bar", "in baz", envir = .GlobalEnv)
}
print(bar)
baz()
print(bar)
}
bar
#[1] "global"
foo()
#[1] "in foo"
#[1] "in foo"
bar
#[1] "in baz"
সুতরাং উভয় সময় আমরা কলটির fooপরেও মানটির ভিতরে বার মুদ্রণ করি "ইন ফু" baz। এটি এর কারণ হিসাবে assignকখনও কখনও অনুলিপি বিবেচনা করেনিbar কারণ আমরা এটি কোথায় দেখতে হবে তা ঠিক জানিয়েছি। তবে, এবার বৈশ্বিক পরিবেশে বারের মান পরিবর্তন করা হয়েছিল কারণ আমরা সেখানে স্পষ্টভাবে নির্ধারিত করেছি।
এখন আপনি স্থানীয় ভেরিয়েবলগুলি তৈরি করার বিষয়ে জিজ্ঞাসা করেছিলেন এবং কোনও ফাংশন তৈরি না করে আপনি এটি মোটামুটি সহজেই করতে পারেন ... আমাদের কেবল localফাংশনটি ব্যবহার করা দরকার ।
bar <- "global"
# local will create a new environment for us to play in
local({
bar <- "local"
print(bar)
})
#[1] "local"
bar
#[1] "global"
globalenv(); globalenv() %>% parent.env; globalenv() %>% parent.env %>% parent.env...