R में पैरेंटफ्रेम () और पैरेंट.इनव () के बीच क्या अंतर है; वे संदर्भ द्वारा कॉल में कैसे भिन्न होते हैं?


84

यह उपयोगी होगा यदि कोई व्यक्ति इसका उदाहरण एक सरल उदाहरण के साथ दे सकता है?

इसके अलावा, इसके और इसके विपरीत उपयोग parent.frame()करने के लिए यह कहां उपयोगी होगा parent.env()

जवाबों:


99

parent.envवह वातावरण है जिसमें एक क्लोजर (जैसे, फ़ंक्शन) को परिभाषित किया गया है। parent.frameवह वातावरण है जिसमें से क्लोजर लागू किया गया था।

f = function() 
     c(f=environment(), defined_in=parent.env(environment()),  
       called_from=parent.frame())
g = function() 
     c(g=environment(), f())

और फिर

> g()
$g
<environment: 0x14060e8>

$f
<environment: 0x1405f28>

$defined_in
<environment: R_GlobalEnv>

$called_from
<environment: 0x14060e8>

मुझे यकीन नहीं है कि जब एक मात्र नश्वर वास्तव में कभी उनका उपयोग करना चाहेगा, लेकिन अवधारणाएं यहां शाब्दिक गुंजाइश को समझने में उपयोगी हैं

> f = function() x
> g = function() { x = 2; f() }
> h = function() { x = 3; function() x }
> x = 1
> f()
[1] 1
> g()
[1] 1
> h()()
[1] 3

या आर के लिए परिचय में गूढ़ 'बैंक खाते' उदाहरण में, विवरण अनुभाग का पहला पैराग्राफ ?parent.frameचीजों को स्पष्ट कर सकता है।

वातावरण R में व्याप्त है, उदाहरण के लिए, search()पथ (लगभग) वातावरण एक साथ भाई-बहन के रिश्ते में जंजीर है। कभी-कभी env = new.env(parent=emptyenv())प्रतीक लुक-अप को दरकिनार करने के लिए देखता है - आम तौर env[["x"]]पर पहले में दिखाई देगा envऔर फिर envयदि नहीं मिला है। इसी तरह, <<-काम शुरू करने के लिए लग रहा है parent.env। R में अपेक्षाकृत नया संदर्भ वर्ग कार्यान्वयन एक उदाहरण-विशिष्ट वातावरण को परिभाषित करने के लिए इन विचारों पर निर्भर करता है जिसमें प्रतीक (उदाहरण के क्षेत्र और विधियाँ) पाए जा सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.