Global बनाम Local Scope
.GlobalEnv, फ़ंक्शन environments और closures के बीच अंतर समझें।
Global बनाम Local Scope, CoddyKit पर R Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह R Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
फलनों में स्थानीय चर
किसी फलन के मुख्य भाग के अंदर <- या = से असाइन किए गए चर उस फलन के लिए स्थानीय होते हैं। वे फलन के अपने परिवेश में बनाए जाते हैं और फलन के लौटने पर समाप्त हो जाते हैं। वे बुलाने वाले दायरे को कभी प्रभावित नहीं करते।
x <- 'global'
f <- function() {
x <- 'local' # creates a new local binding, does not modify global x
cat('Inside f: x =', x, '\n')
}
f()
cat('Outside f: x =', x, '\n') # still 'global'फलन पैरामीटर स्थानीय होते हैं
फलन पैरामीटर भी स्थानीय चर होते हैं। फलन के अंदर किसी पैरामीटर में परिवर्तन करने से बुलाने वाले परिवेश का तर्क प्रभावित नहीं होता। R तर्कों को मान के रूप में भेजता है (परिवर्तन पर प्रतिलिपि बनने की प्रक्रिया के साथ)।
double_it <- function(n) {
n <- n * 2 # modifies local copy only
cat('Inside:', n, '\n')
}
my_n <- 5
double_it(my_n)
cat('Outside:', my_n, '\n') # still 5वैश्विक असाइनमेंट के लिए <<-
<<- (सुपर-असाइनमेंट) जनक-श्रृंखला में ऊपर की ओर जाता है और मिलने वाली पहली संगति को असाइन करता है। यदि कहीं भी संगति नहीं मिलती, तो वह वैश्विक परिवेश में बंधन बनाता है। इसका कम उपयोग करें — <<- का अत्यधिक उपयोग फलनों को समझना कठिन बना देता है।
total <- 0
add_to_total <- function(x) {
total <<- total + x
}
add_to_total(10)
add_to_total(25)
add_to_total(5)
cat('Total:', total, '\n')<<- श्रृंखला में ऊपर खोजता है
<<- आँख मूँदकर वैश्विक परिवेश में असाइन नहीं करता — यह जनक-श्रृंखला में ऊपर की ओर जाता है और उस पहले परिवेश में असाइन करता है जहाँ नाम पहले से मौजूद हो। यदि चर किसी संलग्न फलन में मौजूद है, तो वहीं उसका मान बदला जाता है।
outer <- function() {
n <- 0
increment <- function() n <<- n + 1
increment()
increment()
cat('n in outer:', n, '\n') # n was in outer's env, updated there
}
outer()
# n does NOT appear in global env
cat('n in global:', exists('n', envir = globalenv()), '\n')परिवेश को स्पष्ट रूप से चुनने के लिए assign()
assign('name', value, envir = e) सीधे किसी विशिष्ट परिवेश में असाइन करता है। यह <<- से अधिक स्पष्ट है और तब उपयोगी होता है जब आपके पास कोई परिवेश-वस्तु हो और आप उसमें ठीक-ठीक कोई मान रखना चाहते हों।
my_env <- new.env(parent = emptyenv())
assign('score', 95, envir = my_env)
assign('name', 'Alice', envir = my_env)
cat('score:', get('score', envir = my_env), '\n')
cat('name :', get('name', envir = my_env), '\n')local() — अलग-थलग कोड खंड
local({...}) किसी नए स्थानीय परिवेश में व्यंजक का मूल्यांकन करता है। इस खंड के अंदर बनाए गए चर वैश्विक परिवेश में बाहर नहीं आते। यह उन अस्थायी गणनाओं के लिए उपयोगी है जिन्हें कार्यक्षेत्र को अव्यवस्थित नहीं करना चाहिए।
result <- local({
temp1 <- 100
temp2 <- 200
temp1 + temp2 # the last expression is returned
})
cat('result:', result, '\n')
cat('temp1 in global:', exists('temp1'), '\n') # FALSEअलगाव के लिए local() बनाम फलन
local() और तुरंत बुलाया गया फलन, दोनों दायरे को अलग रखते हैं। एक बार के अलगाव के लिए local() अधिक संक्षिप्त है; जब तर्क को दोबारा उपयोग करने योग्य या जाँचने योग्य बनाना हो, तब नामित फलन बेहतर होता है।
# Option A: local()
result_a <- local({
x <- 7
y <- 3
x * y
})
# Option B: immediately invoked function
result_b <- (function() {
x <- 7
y <- 3
x * y
})()
cat(result_a, result_b, '\n')
cat('x in global:', exists('x'), '\n')किसी फलन से वैश्विक चर पढ़ना
फलन बिना किसी विशेष वाक्यविन्यास के अपने संलग्न दायरे (वैश्विक या किसी अन्य) से चर पढ़ सकते हैं। यह मानक लेक्सिकल स्कोपिंग है। हालांकि, वैश्विक स्थिति पर अत्यधिक निर्भरता से फलनों की जाँच कठिन हो जाती है — जहाँ संभव हो, स्पष्ट तर्कों को प्राथमिकता दें।
tax_rate <- 0.20 # global configuration
apply_tax <- function(price) {
price * (1 + tax_rate) # reads tax_rate from global
}
cat(apply_tax(100), '\n')
cat(apply_tax(250), '\n')चर का छायांकन
जब किसी स्थानीय चर का नाम वैश्विक चर के समान होता है, तो स्थानीय बंधन वैश्विक बंधन को ढक लेता है। फलन के अंदर स्थानीय संस्करण का उपयोग होता है। वैश्विक चर अपरिवर्तित रहता है। अनजाने में ऐसा करने पर सूक्ष्म त्रुटियाँ हो सकती हैं।
mean <- 99 # shadows base R's mean() function
cat(mean, '\n') # prints 99, not the function
# To call the real mean, use base:: prefix
cat(base::mean(c(1, 2, 3, 4, 5)), '\n')
rm(mean) # remove the shadowfunction() के परिवेश
जब भी कोई फलन बुलाया जाता है, R उस बुलावे के लिए एक नया परिवेश बनाता है और फलन के संलग्न परिवेश को उसका जनक बनाता है। अलग-अलग बुलावों के स्थानीय चर एक-दूसरे को प्रभावित नहीं करते, यहाँ तक कि पुनरावर्ती बुलावों में भी नहीं।
factorial_r <- function(n) {
# Each recursive call has its own local n
if (n <= 1) return(1)
n * factorial_r(n - 1)
}
cat('5! =', factorial_r(5), '\n')
cat('7! =', factorial_r(7), '\n')चर हटाने के लिए rm()
rm('name') या rm(name) वर्तमान (या निर्दिष्ट) परिवेश से कोई बंधन हटा देता है। अस्थायी चरों को साफ़ करने के लिए इसका उपयोग करें। किसी विशिष्ट परिवेश से हटाने के लिए envir = e दें।
x <- 42
y <- 'hello'
cat('Before rm:', ls(), '\n')
rm(x)
cat('After rm(x):', exists('x'), '\n')
rm('y')
cat('After rm(y):', exists('y'), '\n')त्वरित जाँच
<<- ऐसा क्या करता है जो नियमित <- नहीं करता?
दायरा: मुख्य बातें
वैश्विक बनाम स्थानीय दायरे के लिए मुख्य बातें:
- फलन के अंदर
<-स्थानीय चर बनाता है — वैश्विक चर अपरिवर्तित रहता है - फलन पैरामीटर स्थानीय होते हैं; R मान के रूप में भेजता है (परिवर्तन पर प्रतिलिपि बनती है)
<<-जनक-श्रृंखला में ऊपर की ओर जाता है और पहली मेल खाती बंधन को बदलता है- परिवेश-लक्षित स्पष्ट असाइनमेंट के लिए
assign('x', val, envir=e) local({...})नामित फलन बनाए बिना अस्थायी दायरा प्रदान करता है- महत्वपूर्ण नामों (जैसे
mean,c,T) को ढकने से बचें
# Demonstrate local + <<- cleanly
running_sum <- 0
local({
values <- c(10, 20, 30, 40)
for (v in values) running_sum <<- running_sum + v
})
cat('Running sum:', running_sum, '\n')
cat('values in global:', exists('values'), '\n')एआई शिक्षक के साथ R सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 43
- पाठ
- 159
अक्सर पूछे जाने वाले प्रश्न
क्या “Global बनाम Local Scope” पाठ निःशुल्क है?
हाँ — R Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Global बनाम Local Scope” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Global बनाम Local Scope” में मैं क्या सीखूँगा?
.GlobalEnv, फ़ंक्शन environments और closures के बीच अंतर समझें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ R Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या R Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर R Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“Global बनाम Local Scope” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस R Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर R Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- R में Environment क्या है?
- Lexical Scoping के नियम
- Global बनाम Local Scope
- Environments बनाना और निरीक्षण करना