शायद डिस्क से डिस्क को हटाएं, हटाएं, डिस्क से पढ़ें? इस दृष्टिकोण के साथ मैं एकमात्र संभावित समस्या का अनुमान लगा सकता हूं कि माता-पिता/बाल वातावरण के बीच कोई संबंध खो जाएगा। लेकिन यदि आप बस एक पर्यावरण से दूसरे वातावरण में मूल्यों की प्रतिलिपि बनाने की कोशिश कर रहे हैं, तो शायद यह कोई समस्या नहीं है?
अद्यतन:
मैं दोहराने नहीं कर सकते हैं आप प्रति दृष्टिकोण के बारे में क्या कहते हैं। नीचे दिया गया कोड दिखाता है कि उपयोग की गई अधिकतम मेमोरी (जैसा कि gc
द्वारा रिपोर्ट किया गया है) में वृद्धि नहीं होती है। ऐसा इसलिए है क्योंकि मान "वादा" होते हैं, गहरे प्रतिलिपि नहीं। एक प्रतिलिपि बनाई जाएगी, हालांकि, यदि आप पुराने वातावरण से इसे हटाने से पहले नए वातावरण में कोई ऑब्जेक्ट बदलते हैं।
R> e1 <- new.env()
R> e1$x <- numeric(5e7)
R> e1$y <- numeric(5e7)
R> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 171022 9.2 350000 18.7 350000 18.7
Vcells 100271746 765.1 110886821 846.0 100272535 765.1
R> e2 <- new.env()
R> for(n in ls(e1, all.names=TRUE))
+ assign(n, get(n, e1), e2)
R> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 171038 9.2 350000 18.7 350000 18.7
Vcells 100271788 765.1 116511162 889.0 100272535 765.1
R> identical(e1$x,e2$x)
[1] TRUE
R> identical(e1$y,e2$y)
[1] TRUE
स्रोत
2013-02-06 16:02:27
आप कैसे नकल (विशेष रूप से 'के लिए (एन ls (ई 1, all.names = TRUE)) (एन असाइन करते हैं, (, एन प्राप्त ई 1), E2)' में) स्मृति बढ़ जाती है का एक उदाहरण प्रदान कर सकते हैं पदचिह्न? मैंने बस कोशिश की और अधिकतम मेमोरी का इस्तेमाल किया - जैसा कि 'gc() '--did द्वारा सूचित किया गया है। –
मुझे लगता है कि आप सही हैं। यह स्मृति पदचिह्न में वृद्धि नहीं करता है। शायद वादे के कारण? ऐसा लगता है कि आप नए पर्यावरण को आवंटित कर सकते हैं और वर्तमान पर्यावरण से हटा सकते हैं और जब तक आप मूल्यांकन नहीं करते हैं तो आप अच्छे हैं। – SFun28
यदि आप पुराने वातावरण से इसे हटाए जाने से पहले नए वातावरण में कोई ऑब्जेक्ट बदलते हैं तो एक प्रतिलिपि बनाई जाएगी। –