2013-01-13 29 views
9

सीआरएएन को मेरा नवीनतम सबमिशन वापस आ गया क्योंकि मेरे पास वैश्विक पर्यावरण के लिए असाइनमेंट है जो अब फेंक दिया गया है।एम्बेडेड डेटा अपडेट करना, उदाहरण के लिए sysdata.rda

मेरे पास एक एम्बेडेड डेटा सेट (sysdata.rda) है जिसमें उपयोगकर्ता (संयुक्त राज्य अमेरिका में) के आधार पर कॉन्फ़िगरेशन पैरामीटर शामिल हैं जो उपयोगकर्ता रहता है। जब मैं कोई नया उपयोगकर्ता प्रोग्राम का उपयोग करता हूं तो मैं चाहता हूं कि यह एम्बेडेड डेटा सेट अपडेट करने योग्य हो। मैंने पहले इस डेटा को प्रारंभिक फ़ंक्शन में उपयोगकर्ता द्वारा उपयोग किया था और इसे वैश्विक असाइनमेंट के माध्यम से उपयोगकर्ता के लिए सुलभ बना दिया था।

मैं इस एम्बेडेड डेटा को अपडेट करने और इसे अपने डिफ़ॉल्ट सत्र के लिए उपयोग करने वाले डिफ़ॉल्ट डेटा को समझने के लिए संघर्ष कर रहा हूं।

पहले मैंने डेटा/डेटा में डेटा रखा था और हाल ही में इसे /R/sysdata.rda पर स्विच कर दिया क्योंकि यह उस लोकेल के लिए अधिक उपयुक्त लग रहा था। अब मैं इतना यकीन नहीं कर रहा हूँ।

किसी भी मदद की बहुत

+0

क्या आप पैकेज में इंस्टॉल करने के बाद एक बार पूछना चाहते हैं, या एक बार जब वे पैकेज लोड करते हैं? – hadley

+0

वे अपने आपूर्ति किए गए डेटा के साथ पैकेज लोड करते हैं और इंगित करते हैं कि वे किस राज्य से हैं (उदा।, TX)। पैकेज पहचानता है कि उनके राज्य विशिष्ट पैरामीटर एम्बेडेड डेटा का हिस्सा नहीं हैं, उन्हें जितना संभव हो उतना गणना करता है, और फिर उन्हें एम्बेडेड डेटासेट में जोड़ता है। मेरी समस्या यह है कि उस अद्यतन डेटासेट को शेष सत्र में उपलब्ध कराया जा रहा है। मैं इसे webobalEnv को सौंपकर ऐसा करता था। – dbetebenner

उत्तर

4

कुंजी वैश्विक पर्यावरण के अलावा किसी अन्य वातावरण में असाइनमेंट करना है।

एक स्पष्ट पर्यावरण के साथ कार्य करना सरल है: दो बुनियादी तकनीक, local() और <<- का उपयोग कर या स्पष्ट रूप से एक नया माहौल पैदा कर रहे हैं वातावरण बनाने के लिए और फिर एक सूची की तरह इसे में आवंटित:

my_opts <- new.env(parent = emptyenv()) 
set_state <- function(value) my_opts$state <- value 
get_state <- function() my_opts$state 

local() का उपयोग करना एक छोटे से अधिक जटिल है, और कैसे काम करता है <<- ०१२३०८४८५९६ देखने के बारे में अधिक जानकारी के लिए <<-

set_state <- NULL 
get_state <- NULL 

local({ 
    state <- NULL 
    get_state <<- function() state 
    set_state <<- function(value) state <<- value 
}) 

के साथ कुछ चाल की आवश्यकता है, "असाइनमेंट: बाध्यकारी नामों के मानों" खंड में।

+0

देउंगा बहुत उपयोगी! मैं पहला मार्ग चला गया। यदि फ़ंक्शन को राज्य का डेटा नहीं मिलता है, तो यह एक वातावरण बनाता है और एम्बेडेड डेटा (प्रत्येक राज्य के लिए शाखा के साथ एक बड़ी सूची) में राज्य की शाखा को पॉप्युलेट करता है। अद्यतन डेटा को फिर नए पर्यावरण को सौंपा गया है।अब मैं 'संलग्न' का उपयोग करने के लिए आर सीएमडी चेक -स-क्रैन से पहले दौड़ रहा हूं ताकि अपडेट किए गए डेटा का उपयोग फ़ंक्शन से बाहर निकलने के बाद किया जा सके। मुझे यकीन नहीं है कि – dbetebenner

+0

'संलग्न' का उपयोग करने के बजाय, केवल एक फ़ंक्शन लिखें जो आपके इच्छित डेटा तक पहुंचता है, और उसे अपने कोड में कॉल करें। – hadley

+0

हम्म। मेरा कुछ छूट रहा है। डेटा (चलिए इसे 'internal_data' कहते हैं) को फ़ंक्शन पर कॉल में बढ़ाया जाता है। मुझे यकीन नहीं है कि उस फ़ंक्शन से 'internal_data' को कैसे बढ़ाया जाए (मैं फ़ंक्शन के बिंदु के रूप में वापस लौटने के लिए इसे वापस नहीं करना चाहता क्योंकि यह फ़ंक्शन का बिंदु नहीं है)। मेरा वर्तमान गरीब आदमी का समाधान (जो आर सीएमडी चेक पास करता है --as-cran ऑब्जेक्ट को सहेजना है और फिर इसे webobalEnv में लोड करना है। – dbetebenner

1

सराहना क्यों जो डेटा और यह उपयोगकर्ता कॉल data(foo) अद्यतन लोड करता है /data में एक foo.R फ़ाइल नहीं? यह /data के लिए अनुमति दी विकल्पों में से एक है, लेकिन से Writing R Extensions

ध्यान दें कि आर कोड होना चाहिए निम्न पर ध्यान दें "आत्मनिर्भर" और पैकेज द्वारा प्रदान की अतिरिक्त कार्यक्षमता के उपयोग नहीं करते हैं, तो यह है कि डेटा फ़ाइल पैकेज को लोड किए बिना भी इस्तेमाल किया जा सकता है।

आपको लगता है कि प्रतिबंध के साथ रह सकते हैं तो data(foo) डेटा लोड सकता है, यह अद्यतन करते हैं, और सुनिश्चित करें कि यह एक विशिष्ट नामित वस्तु है, जो आप तो अपने कार्यों में उल्लेख करने के लिए कर रही है।

+0

* // फ़ाइल में/डेटा नहीं माना गया था। मैं इसे एक स्पिन – dbetebenner