2010-06-22 22 views
29

पैकेज करने के लिए ऑब्जेक्ट्स जोड़ें, मैं एक पैकेज नामस्थान के अंदर एक फ़ंक्शन को धक्का देना चाहता हूं ताकि यह उस पैकेज की आंतरिक ऑब्जेक्ट्स तक पहुंच सके (चलिए आंकड़े पैकेज को उदाहरण के रूप में उपयोग करें)। मैंनेनामस्थान पैकेज

myfun <- function(x) print(x) 
env = loadNamespace("stats") 
assign("myfun", myfun , env) 

का उपयोग करने का प्रयास किया है लेकिन यह लॉक है। इसलिए मैंने अपनी ऑब्जेक्ट को अनलॉक करने का प्रयास किया है

unlockBinding("myfun", env) 

चूंकि myfun अभी तक मौजूद नहीं है, इसलिए मैं इसे अनलॉक नहीं कर सकता।

कोई मदद?

उत्तर

28
@ हैडली के समाधान की लाइन ही

, लेकिन नाम स्थान, कैसे के बारे में वातावरण का उपयोग:

environment(myfun) <- asNamespace('stats') 
+0

महान, बहुत धन्यवाद! – TMS

7

ट्रिपल कोलन ऑपरेटर ::: का उपयोग करके आप पैकेज की आंतरिक वस्तुओं तक पहुंच सकते हैं। उदाहरण के लिए, as.roman और utils:::.roman2numeric पर एक नज़र डालें। (इसकी तुलना utils::.roman2numeric से करें।) यह आपके कार्य को नामस्थान के अंदर रखने से बचने में आपकी सहायता कर सकता है।

आप पैकेज में dont.lockBindings पर भी देखना चाहते हैं, जो नामस्थान लॉक होने से रोकता है।

+0

अगर मैं सही ढंग से समझ, मैं एक पैकेज के नाम स्थान अनलॉक नहीं कर पा (के अलावा किसी को एक बार यह लॉक किया गया है dont.lock बाइंडिंग के साथ इसे फिर से लोड करना)। इसलिए एक नया कार्य एक पोस्टरियोरी जोड़ना असंभव है। –

+0

@Etiennebr: AFAIK आप सही हैं। एक बार नामस्थान लॉक हो जाने पर, आप इसमें शामिल नहीं कर सकते हैं। मुझे अभी भी लगता है कि आगे बढ़ने का तरीका '::: 'है। –

14

क्यों न केवल अपने नए कार्य के पर्यावरण को सही जगह पर सेट करें?

myfun <- function(x) print(x) 
environment(myfun) <- as.environment("package:stats") 
+0

मुझे यह नहीं पता था! लेकिन मुझे लगता है कि मैं इसे नामस्थान बनाना चाहता हूं: पैकेज के बजाय आंकड़े: आंकड़े। ऐसा करने का कोई तरीका है (बस इसे .environment() में बदलना काम नहीं करता है)। –

+1

नामस्थान एक पर्यावरण नहीं है ... – hadley

+7

मुझे पार्टी के लिए देर हो चुकी है, लेकिन यह दूसरों के लिए उपयोगी हो सकती है: नामस्थान वास्तव में एक पर्यावरण है। 'नेमस्पेस: आँकड़े' एक वैश्विक वातावरण है _descendent_ और सभी ऑब्जेक्ट्स हैं। निर्यात की गई वस्तुओं को 'पैकेज: आंकड़े' पर कॉपी किया गया है, जो वैश्विक पर्यावरण का _ancestor_ है। – wch

संबंधित मुद्दे