2013-02-14 31 views
12

क्या कोई पूर्वनिर्धारित स्थान है जहां एक आर पैकेज कैश्ड डेटा स्टोर कर सकता है? डेटा सत्रों में जारी रहना चाहिए। मैं ${R_LIBS_USER}/package_name की उपनिर्देशिका बनाने के बारे में सोच रहा था, लेकिन मुझे यकीन नहीं है कि यह पोर्टेबल है और यदि मेरा पैकेज सिस्टमव्यापी स्थापित है तो यह "अनुमति" है।क्या कोई लगातार स्थान है जो हमेशा लिखने योग्य होता है जिसे पैकेज द्वारा डेटा कैश के रूप में उपयोग किया जा सकता है?

विचार है निम्नलिखित: (data() के प्रलेखन के अनुसार) पैकेज का data उपनिर्देशिका जो data(mydata) बुला द्वारा निष्पादित किया जाएगा में एक अनुसंधान स्क्रिप्ट mydata.R बनाएँ। यह स्क्रिप्ट इंटरनेट से डेटा लोड करेगी और इसे कैश करेगी, अगर इसे पहले कैश नहीं किया गया है। (यदि डेटा पहले ही कैश किया गया है, तो कैश का उपयोग किया जाएगा।) इसके अतिरिक्त, कैश को अमान्य करने के लिए एक फ़ंक्शन प्रदान किया जाएगा और/या यह जांचने के लिए कि डेटा का कोई नया संस्करण ऑनलाइन उपलब्ध है या नहीं।

वर्तमान में, डेटा फ़ाइलों के चार प्रारूप समर्थित हैं::

यह data() के प्रलेखन से है

  1. फ़ाइलों न खत्म होने वाली 'आर' या 'आर' स्रोत हैं() डी में, आर कार्यशील निर्देशिका के साथ अस्थायी रूप से संबंधित फ़ाइल युक्त निर्देशिका में बदल गया। (डेटा सुनिश्चित करता है कि utils संकुल जुड़ा हुआ है, के मामले में यह utils :: डेटा के माध्यम से चलाया जा रहा था।)

  2. ...

दरअसल, data उपनिर्देशिका में एक फ़ाइल fortytwo.R बनाने निम्नलिखित सामग्री के साथ एक पैकेज की:

fortytwo = data.frame(answer=42) 

और फिर data(fortytwo) क्रियान्वित एक डेटा फ्रेम चर fortytwo पैदा करता है। अब सवाल यह है कि fortytwo.R डेटा को कैश करेगा यदि गणना करना मुश्किल था?

EDIT: मैं दो पैकेज बनाने के बारे में सोच रहा हूं: एक "डेटा" पैकेज जो डेटा प्रदान करता है, और एक "कोड" पैकेज जो उस पर चल रहा है। प्रश्न "डेटा" पैकेज से संबंधित है: यह प्रति उपयोगकर्ता संग्रहण में फ़ाइलों को कहां स्टोर कर सकता है ताकि यह आर सत्रों में लगातार हो और विभिन्न आर परियोजनाओं से सुलभ हो?

संबंधित: Package that downloads data from the internet during installation

+2

आप https://github.com/hadley/rappdirs पर एक नज़र डालना चाहते हैं - यह ऐपडिर्स का एक बंदरगाह है, जो एक पायथन पुस्तकालय है जो ओएस-विशिष्ट तरीके से सही निर्देशिकाओं को खोजने का प्रयास करता है। – hadley

+0

बस स्पष्टीकरण देने का प्रयास कर रहा है: क्या आपका मतलब है कि आर स्क्रिप्ट द्वारा संसाधित किए जाने के बाद डेटा कहां संग्रहीत किया जा सकता है? दूसरे शब्दों में, क्या आपका प्रश्न वास्तव में डेटा पैकेज से डेटा के बारे में है, या डेटा जो किसी भी प्रसंस्करण से आउटपुट के रूप में उत्पन्न होता है? यह * बाद * की तरह लगता है। – A5C1D2H2I1M1N2O1R2T1

+0

@ हैडली: क्या कोई मौका है कि यह जल्द ही किसी भी समय सीआरएएन पर दिखाई देगा? यदि ऐसा करने के लिए कोई आर-विशिष्ट तरीका नहीं है (जैसे इसे '$ {R_USER_LIBS} के उपदिर में डालने जैसा), तो मैं खुशी से आपके पैकेज का उपयोग करूंगा। – krlmlr

उत्तर

-2

क्या आपने इन-मेमोरी डेटाबेस देखा है? H2 & रेडिस आरएच 2 & रेडिस के माध्यम से आर में बाइंडिंग है- दोनों आपको आर सत्रों में डेटा साझा करने की अनुमति देते हैं- जब तक कि सत्र सत्र जीवित न हो। गैर-समवर्ती सत्रों में इसे जारी रखने के लिए, आपको डिस्क पर अपना डेटा लिखना होगा (मान लीजिए कि आप इसे फ्लाई पर फिर से नहीं बना सकते हैं- जो इस प्रश्न के उद्देश्य को हरा देगा), और मुझे डेटा पर विश्वास है पैकेज एक अच्छा विकल्प होगा। इस तरह, आप एक अद्यतन फ़ंक्शन जोड़ सकते हैं जो हर बार पैकेज लोड करता है (यानी यदि कोड पैकेज में सही निर्भरता है)

एक उदाहरण RWeka & RWekaJars पैकेज है। उन्हें सीआरएएन पर देखो, और यह समझना काफी आसान होना चाहिए कि वे कैसे काम करते हैं।

+0

मैं डेटा को आर के मूल स्वरूप में डिस्क पर लिख सकता हूं। मुझे बस एक जगह खोजने की जरूरत है * जहां * मैं उन्हें डाल सकता हूं ताकि अन्य आर सत्र वहां पाए जाएंगे। – krlmlr

+0

जैसा मैंने कहा, मैं इन-मेमोरी डेटाबेस का उपयोग करता हूं। एच 2 और रेडिस मुझे अच्छी तरह से सेवा करते हैं। – jackStinger

1

आर में पैकेज-विशिष्ट लगातार कैशिंग के लिए कोई बिल्कुल परिभाषित स्थान नहीं है।हालांकि, R.cache package कैश किए गए डेटा को बनाने और प्रबंधित करने के लिए एक इंटरफ़ेस प्रदान करता है। ऐसा लगता है कि यह आपके परिदृश्य के लिए उपयोगी हो सकता है।

उपयोगकर्ताओं R.cache (library(R.cache)) लोड करते हैं, वे शीघ्र निम्नलिखित मिलती है:

The R.cache package needs to create a directory that will hold cache files. 
It is convenient to use one in the user's home directory, because it remains 
also after restarting R. Do you wish to create the '~/.Rcache/' directory? If 
not, a temporary directory (/tmp/RtmpqdUcbP/.Rcache) that is specific to this 
R session will be used. [Y/n]: 

वे तो एक बनाने के लिए अपने घर निर्देशिका है, जो संभवतः लगातार है में कैश निर्देशिका बनाने के लिए चुन सकते हैं या सत्र-विशिष्ट निर्देशिका। यदि आप अपना डेटा पैकेज R.cache पर निर्भर करते हैं, तो आप कैश किए गए ऑब्जेक्ट के अस्तित्व को .onLoad() हुक फ़ंक्शन में देख सकते हैं और यदि डेटा नहीं है तो डेटा डाउनलोड कर सकते हैं। वैकल्पिक रूप से, आप इसे अपने स्वयं के प्रश्न में सुझाए गए तरीके से कर सकते हैं।