मैं R में नया हूं और परिवेश को समझने की कोशिश करता हूं। उस प्रश्न के अनुसार प्रत्येक फंक्शन कॉल के लिए एक वातावरण कहा जाता है। इसलिए, मुझे उम्मीद थी कि search() मुझे एक नए फ़ंक्शन कॉल द्वारा बनाया गया नया वातावरण दिखाएगा। वास्तव में, यह डेमो कोड में दिखाई नहीं दे रहा है और साथ ही वेरिएबल x, जो मूल वातावरण में होना चाहिए, नहीं मिला है।

a<-function(){ # should create a further environment
  print(search()) # does not include any "new" environment, just global and packages
  #print(x) #not working but should be in the parent environment
}

b<-function(){ #should create an environment
  x<-2
  a()
}
b()
r
1
user3579222 10 अक्टूबर 2020, 18:05

1 उत्तर

सबसे बढ़िया उत्तर

आप परोक्ष रूप से दो प्रश्न पूछते हैं: search() द्वारा दिखाया गया परिवेश क्यों नहीं है, और x फ़ंक्शन a() में दिखाई क्यों नहीं देता है।

पहला सबसे आसान है: search() केवल उन परिवेशों को दिखाता है जिन्हें attach() का उपयोग करके खोज सूची में जोड़ा गया है। कई अन्य वातावरण हैं।

दूसरे प्रश्न के लिए, आप environment() पर कॉल करके वर्तमान में सक्रिय परिवेश देख सकते हैं। आप parent.env(environment()) पर कॉल करके इसके पैरेंट को देख सकते हैं, और खाली वातावरण में श्रृंखला के अंत तक श्रृंखला का अनुसरण कर सकते हैं।

यदि आप a() को कॉल करते समय ऐसा करते हैं, तो आप देखेंगे कि सक्रिय परिवेश में कुछ भी नहीं है, क्योंकि उस फ़ंक्शन में कोई स्थानीय चर नहीं हैं। इसका मूल वैश्विक वातावरण है, क्योंकि यहीं पर a() बनाया गया था। वैश्विक पर्यावरण का जनक खोज सूची में अगली प्रविष्टि है, और पहले के माता-पिता खोज सूची के माध्यम से आधार वातावरण में वापस जाते हैं, जिसका माता-पिता खाली वातावरण है।

आपने उम्मीद की थी कि b() का वातावरण वहां कहीं दिखाई देगा, लेकिन ऐसा नहीं है। b(), a() का कॉलर है, लेकिन इसका a() की परिभाषा से कोई लेना-देना नहीं है।

2
user2554330 10 अक्टूबर 2020, 15:21