आर

2015-02-14 7 views
10

में आपने कौन से पैकेजों का उपयोग किया है, यह बताने के लिए कि मेरे पास वक्तव्य और अपवाद के मामलों के साथ बहुत लंबी आर स्क्रिप्ट है। जैसा कि मैं जा रहा हूं, यदि पुस्तकालयों का आयात और परीक्षण किया गया है, तो मैंने वास्तव में उन्हें बहुत अच्छी तरह से दस्तावेज नहीं किया है। समस्या यह है कि यदि मैं इसे एक स्वच्छ स्थापना से चलाता हूं, तो मुझे यकीन नहीं है कि स्क्रिप्ट कौन से बयान चलाएगी, और इसलिए पुस्तकालयों की आवश्यकता होगी।आर

मेरा प्रश्न है: क्या कोई आर कार्य है कि यह जांचने के लिए कि कौन सी लाइब्रेरी स्क्रिप्ट में उपयोग की जा रही हैं?

संपादित करें: मैं पुस्तकालयों कि स्थापित किया गया है का उपयोग नहीं किया है तो print(sessionInfo())उपयोगी नहीं होगा लेकिन और मैं सिर्फ मैं एक के बारे में सुनिश्चित नहीं कर रहा हूँ एक install.packages समारोह

+0

[यह है कि क्या आप के लिए देख रहे है] (http://stackoverflow.com/questions/9341635/how-can-i-check -for-install-r-packages-before-running-install-packages) – Ethaan

+2

@Ethaan जो वास्तव में वह नहीं पूछ रहा है वह – nico

+0

मुझे लगता है कि आप स्क्रिप्ट के लेखक (ओं) के एक स्पैडिंग/न्यूटरिंग टूल की तलाश में हैं । मुझे लगता है कि आप स्क्रिप्ट चलाने और संकुल को स्थापित करने के लिए बर्बाद हो गए हैं, यह पता लगाने के लिए कि कौन सा फ़ंक्शन पैकेज से आता है। एक ही नाम के साथ शुभकामनाएं विभिन्न पैकेजों में काम करती हैं (यह वह जगह है जहां उपकरण आसान होता है)। मुझे 'लाइब्रेरी ("एसओएस") मिलती है; findFn ("foo")' कार्यों को देखने के लिए आसान है। –

उत्तर

2

साथ स्क्रिप्ट शुरू करना चाहते हैं अच्छा तरीका यह automatize करने के लिए ... लेकिन क्या तुम कर सकते हो रहा है:

  1. खुला एक नया आर सांत्वना sessionInfo साथ
  2. चेक है कि आप अतिरिक्त संकुल लोड नहीं है।
    आप इसे sessionInfo का उपयोग करके देख सकते हैं। यदि आप डिफ़ॉल्ट रूप से अतिरिक्त पैकेज लोड करते हैं (उदा। अपनी आरआरओफाइल फ़ाइल का उपयोग करके) मेरा सुझाव है कि आप ऐसा करने से बचें, क्योंकि यह आपदा के लिए एक नुस्खा है। stats, graphics, grDevices, utils, datasets, methods, और base:
    आम तौर पर आप केवल आधार संकुल लोड होना चाहिए।

    आप का उपयोग कर किसी भी अतिरिक्त पुस्तकालयों अनलोड कर सकते हैं:

    detach("package:<packageName>", unload=TRUE) 
    
  3. अब library और require कॉल के सभी टिप्पणी के बाद स्क्रिप्ट चलाने और देखें कि कौन कार्यों एक त्रुटि दे।

  4. प्राप्त करने के लिए जो पैकेज कंसोल में प्रत्येक समारोह प्रकार के लिए आवश्यक है:

    ??<functionName> 
    
  5. लोड आवश्यक संकुल और फिर से रन संतुष्ट जब तक 3-5 चरणों।

+0

हाँ, यह इस समय बहुत कुछ है जो मैं कर रहा हूं। मैं शायद शुरुआत में कुछ बयान जारी कर दूंगा जो मैंने वर्तमान में डाउनलोड किए गए सभी संकुल को स्थापित कर लिया है। - भले ही वे उपयोगी न हों। – aeongrail

1

आप यहाँ GitHub पर क्रांति Analytics से चौकी समारोह को देखने के लिए चाहते हो सकता है: https://github.com/RevolutionAnalytics/checkpoint

यह इस में से कुछ करता है, और reproducibility की समस्या का हल। लेकिन मुझे नहीं लगता कि यह आपके द्वारा उपयोग किए जा रहे कार्यों की एक सूची की रिपोर्ट कर सकता है।

हालांकि यदि आप कोड देखते हैं तो आपको शायद कुछ विचार मिलते हैं।

1

मैं पहले इस के लिए उपयोग किया है a shell script:

#!/usr/bin/env bash 

source_files=($(git ls-files '*.R')) 
grep -hE '\b(require|library)\([\.a-zA-Z0-9]*\)' "${source_files[@]}" | \ 
    sed '/^[[:space:]]*#/d' | \ 
    sed -E 's/.*\(([\.a-zA-Z0-9]*)\).*/\1/' | \ 
    sort -uf \ 
    > DEPENDS 

यह एक परियोजना में संस्करण नियंत्रण के तहत सभी आर फ़ाइलों को इकट्ठा करने के Git उपयोग करता है। चूंकि आपको संस्करण नियंत्रण का उपयोग करना चाहिए यह आमतौर पर एक अच्छा समाधान है (हालांकि आप संस्करण नियंत्रण प्रणाली को अनुकूलित करना चाहते हैं)। उन कुछ मामलों के लिए जहां परियोजना संस्करण नियंत्रण में नहीं है, आपको इसे (1) संस्करण नियंत्रण के तहत रखना चाहिए। या, उसमें असफल रहा, (2) git ls-files '*.R' के बजाय find . -regex '.*\.[rR]' का उपयोग करें।

और यह DEPENDS file उत्पन्न करता है जिसमें निर्भरता की एक बहुत ही सरल सूची होती है।

यह केवल library और require पर सीधे कॉल पाता है - यदि आप उन कॉल को लपेटते हैं, तो स्क्रिप्ट काम नहीं करेगी।

+3

मुझे नहीं लगता कि ओपी इसके लिए पूछ रहा है, लेकिन मैं इस सवाल को गलत समझ सकता हूं। मुझे लगता है कि वह क्या पूछ रहा है वह है: उसने कई पुस्तकालयों को लोड किया है और यह सुनिश्चित नहीं है कि कौन सा अनावश्यक है। – nico

+0

@ निको उह, आप बिल्कुल सही हैं। –

+1

यदि आप '\ w' और' [[: alnum:]] के बजाय '[\ .a-ZA-Z0-9]' का उपयोग करते हैं, तो आप सभी मान्य आर पैकेज नामों को कैप्चर करते हैं। –

0

मुझे एक समान आवश्यकता थी जब मुझे अपने कोड को पैकेज में बदलने की ज़रूरत थी, इस प्रकार मुझे प्रत्येक पैकेज निर्भरता की पहचान करने की आवश्यकता है और या तो पूर्ण योग्य नाम आयात या उपयोग करना होगा।

पुस्तक पढ़ने में Extending R मुझे मिला XRtools::makeImports पैकेज को स्कैन कर सकता है और सभी पैकेजों को आयात करने की आवश्यकता है। यह हमारी समस्या को तब तक हल नहीं करता है क्योंकि यह केवल मौजूदा पैकेज पर लागू होता है, लेकिन यह मुख्य अंतर्दृष्टि प्रदान करता है कि इसे कैसे किया जाए।

मैंने एक फ़ंक्शन बनाया और इसे मेरे पैकेज mischelper में डाल दिया। आप पैकेज को स्थापित कर सकते हैं, या तो वर्तमान फ़ाइल या चयनित कोड स्कैन करने के लिए RStudio एडिन मेनू का उपयोग करें, या कमांड लाइन फ़ंक्शंस का उपयोग करें। प्रत्येक बाहरी फ़ंक्शन (fun_inside) और फ़ंक्शन जिसे इसे (उपयोग) कहा जाता है, तालिका में सूचीबद्ध किया जाएगा।

enter image description here

अब आप प्रत्येक कार्य करने के लिए जा सकते हैं, प्रेस एफ 1 जो पैकेज यह अंतर्गत आता है खोजने के लिए। मेरे पास वास्तव में एक और पैकेज है जो फ़ंक्शन नामों के लिए सभी स्थापित संकुल स्कैन कर सकता है और डेटाबेस बना सकता है, लेकिन इससे इस उपयोग के लिए अधिक झूठे सकारात्मक कारण हो सकते हैं क्योंकि यदि आपने केवल कुछ संकुल लोड किए हैं, तो F1 केवल खोज लोड किए गए पैकेज दबाएं।

अपने पैकेज पेज में उपयोग के विवरण देखें

https://github.com/dracodoc/mischelper