2016-02-08 13 views
5

मैं पहले से ही खर्च कर रहा हूँ घंटे इस काम बनाने के लिए और लगता है कि मैं कुछ सरल याद आ रही है की कोशिश कर बचाने के लिए कैसे:एक स्टैंडअलोन आर पर्यावरण वस्तु

my_env = new.env(hash = TRUE, parent = .GlobalEnv) 
my_env[['echo']] <- function(x) {x} 
my_env[['echo']](123) 
[1] 123 
my_env$echo(123) 
[1] 123 
save(my_env, file = "MyEnv.RData", envir = .GlobalEnv) 
loaded_env <- load(file = "MyEnv.RData",envir = .GlobalEnv) 
typeof(loaded_env) 
[1] "character" 

जब मैं पूरे कार्यक्षेत्र बचाने के लिए, कार्यों में सहेजे जाते हैं और फिर वापस भरी हुई (जब मैं आर स्टूडियो बंद/खोलता हूं)। लेकिन यहां, save() और/या load() काम नहीं करते हैं, और लोड होने के बाद मेरे पर्यावरण में केवल एक स्ट्रिंग है।

मैं एक पूर्ण कार्यस्थल को एक फ़ाइल में कैसे अलग कर सकता हूं, पूर्ण कार्यक्षेत्र नहीं? मुझे उस माहौल (my_env) के अंदर सभी ऑब्जेक्ट्स की आवश्यकता है ताकि किसी अन्य सत्र में vsobalEnv में लोड किया जा सके।

उत्तर

4

1) सहेजें/लोड करें आपका कोड उस my_env में काम करता है; हालांकि, load पुनर्स्थापित वस्तुओं के नाम लौटाता है, वस्तुओं को स्वयं नहीं। वस्तुएं खुद को वापसी मूल्य के बजाय साइड इफेक्ट के रूप में चुपचाप बहाल कर दी जाती हैं।

save(my_env, file = "MyEnv.RData") 
rm(my_env) 
nms <- load("MyEnv.RData") 
nms 
## [1] "my_env" 
my_env 
## [1] <environment: 0x000000000bfa5c70> 

2) saveRDS/readRDS आप बारी-बारी से saveRDS और readRDS बचाने के लिए और एक वस्तुओं बहाल करने के लिए उपयोग कर सकते हैं। उस स्थिति में readRDSload के विपरीत अपने नाम के बजाय ऑब्जेक्ट को वापस लौटाएं।

saveRDS(my_env, file = "MyEnv.RData") 
rm(my_env) 
my_env <- readRDS("MyEnv.RData") 
my_env 
## <environment: 0x000000000bfb45f8> 

3) को बचाने/देते एक और संभावना है बल्कि वैश्विक वातावरण में से खोज पथ पर MyEnv.RData जगह है:

save(my_env, file = "MyEnv.RData") 
rm(my_env) 
attach("MyEnv.RData") 
my_env 
## <environment: 0x000000000b072188> 

नोट: आप की सामग्री को लोड करने के लिए चाहते हैं my_envmy_env लोड करने के बजाए वैश्विक पर्यावरण में स्वयं को सामग्री को कॉपी करना होगा:

for(el in ls(my_env)) assign(el, get(el, my_env)) 
+0

धन्यवाद! आरडीएस पूरी तरह से काम करता है! मैं एक वेक्टर वेक्टर को पर्यावरण ऑब्जेक्ट को क्रमबद्ध कैसे कर सकता हूं? एक 'serialize' फ़ंक्शन है - क्या यह वही बाइनरी प्रारूप देता है जैसे कि मैं आरडीएस से एक फाइल पढ़ूंगा? –

+0

'save',' saveRDS' और 'serialize' सभी में' ascii' तर्क है। –

+0

इसलिए यदि सभी तर्क समान हैं, तो सभी तीन कार्य बाइनरी संगत प्रारूपों को वापस करते हैं? –

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