2010-10-29 7 views
8

मैं आरआर पैकेज विकसित करते समय, क्या मुझे हर बार परिवर्तन करने के लिए पैकेज को दोबारा बनाना होगा?

में एक पैकेज विकसित कर रहा हूं जब मैं किसी विशेष कार्य या कार्यों के सेट को डिबग कर रहा हूं, तो फ़ंक्शन का परीक्षण करने का सबसे अच्छा तरीका क्या है?

क्या मुझे हर बार स्रोत ('function.R') या आर सीएमडी बिल्ड का उपयोग करना होगा जब भी मैं अपने परिवर्तनों को देखना चाहता हूं?

(जुड़े Emacs ईएसएस कुंजी बाइंडिंग के लिए अतिरिक्त क्रेडिट)

+0

emacs + ess के लिए अतिरिक्त क्रेडिट ... बहुत बुरा Dirk बस ट्रेन के लिए छोड़ दिया। –

उत्तर

8

यह भी देखें http://github.com/hadley/devtools/ जो इस कार्य को आसान बनाने के लिए कुछ टूल प्रदान करता है।

library(devtools) 
install("package_name") 

DevTools भी आसान बना देता है के लिए:

  • पुनः लोड

    उदाहरण के लिए, स्रोत कोड में परिवर्तन करने के बाद, आप का निर्माण स्थापित करते हैं, और एक पैकेज समारोह install() साथ फिर से लोड पूरा पैकेज:

    load_all("pkg") 
    
  • डी बनाएं या अपडेट करें और

    test("pkg") 
    
  • निर्माण आर अध्यक्ष एवं प्रबंध निदेशक की जांच:: ocumentation /inst/test/ में सभी स्क्रिप्ट का उपयोग roxygen2

    document("pkg") 
    
  • रन

    check("pkg") 
    
+0

अब जब मैं परिचित हूं, तो मैं देखता हूं कि देवतोल्स जीवन को अधिक आसान बनाता है, और विकास अधिक कुशल होता है। धन्यवाद! –

5

?insertSource पर एक नज़र, आर 2.12.0 में एक नया समारोह है जो लो, प्लस देखें में अन्य कार्यों के अलावा कि सहायता पृष्ठ की अनुभाग। इसके अलावा, अगर आपके पैकेज में नेमस्पेस है तो ?assignInNamespace देखें।

उपरोक्त मानते हैं कि आप आर स्रोतों को अद्यतन और डिबग करने के बारे में बात कर रहे हैं, संकलित कोड नहीं।

मैंने सामान्य रूप से source() मार्ग का उपयोग किया है जो सामान्य आर डीबगिंग टूल के साथ-साथ सुधार/डिबगिंग के कार्यों के नए संस्करणों को लोड करने के लिए किया गया है। लेकिन मुझे अभी तक मेरे पैकेज में नेमस्पेस नहीं मिला है। मेरी उंगलियों को वर्षों में बफर को सोर्सिंग के लिए emacs + ess में C-c C-l कीबाइंडिंग में काफी उपयोग किया गया है।

+0

आपके उत्तर के लिए धन्यवाद: सीसी सीएल सहायक है, लेकिन किसी अन्य सर्वर (निबंध-रिमोट मोड में) का उपयोग करते समय, दूसरों के लिए नोट करने के लिए, फ़ाइल पथ/सर्वर के बजाय ~/pkg/r/fn.R से शुरू होता है : pkg/r/fn.R भले ही मैं फ़ाइल लिखूं, यह/सर्वर है: .. स्थान यदि मैं सर्वर स्थान का उपयोग नहीं करता, तो मुझे त्रुटि मिलती है: फ़ाइल '/ ssh: server/घर/usr/pkg/आर/function.R 'क्या आपने यह देखा है? –

+0

@ डेविड: क्षमा करें, मेरे emacs + ess fu कमजोर है। मैंने इसका वर्णन कभी भी नहीं किया है जैसा आप वर्णन कर रहे हैं। (मुझे लगता है कि आप स्थानीय संस्करण को संपादित नहीं कर रहे हैं और ईएसएस को किसी भी तरह से यह पता है कि फ़ाइल सर्वर पर कहां है?) सुझाव दें कि आप उपर्युक्त से एक नए प्रश्न के रूप में पूछें, जहां इसे आर पैकेज विकास के बारे में क्यू की तुलना में अधिक आंखें मिलेंगी । –

+0

यह एक अच्छा जवाब था, लेकिन अब मुझे devtools का लटका मिल रहा है, मैं कहूंगा कि यह समस्या का सबसे अच्छा समाधान है इसलिए मैंने अद्यतन किया है और [हैडली का जवाब] चुना है (http://stackoverflow.com/a/4061424/199,217)। –

5

आप पर एक नज़र है करने के लिए चाहते हो सकता है 'mvbutils' पैकेज। मैं इसे अपने पैकेजों को हर समय लाइव-एडिट करने के लिए उपयोग करता हूं; पैकेज लोड होने के दौरान मैं फ़ंक्शंस और प्रलेखन को जोड़, हटा और संपादित कर सकता हूं, और स्थापित संस्करण में परिवर्तन लोड संस्करण में दोनों दिखाई देता है (इसलिए उन्हें अगले आर सत्र में रखा जाता है), और [जब मैं बताता हूं यह] "स्रोत पैकेज" में। मैं केवल आरएमडी के माध्यम से फिर से निर्माण करता हूं जब मैं किसी और को ज़िप्ड संस्करण वितरित करना चाहता हूं। कोड का परीक्षण करने के लिए, मैं 'डीबग' पैकेज का उपयोग करता हूं, जो लोड किए गए पैकेज पर ठीक काम करता है।

मैं 'mvbutils' का भी उपयोग करने के लिए 'mvbutils' का उपयोग करता हूं, जो कभी-कभी थोड़ा बालों वाला हो सकता है।

'एमवीब्यूटिल्स' दस्तावेज वास्तव में कार्रवाई में पूर्ण डेमो के साथ कर सकता है, लेकिन सिद्धांत रूप में मौजूदा डॉक्टर आपको आगे बढ़ना चाहिए।

Emacs में आपकी मदद नहीं कर सकते, खेद ...

+0

यह एक उत्कृष्ट पैकेज है, धन्यवाद। मैं हाल ही में 'foodweb' खोजने में बहुत खुश था, जो मेरे कोड में निर्भरताओं को खोजने में एक बड़ी सहायता थी। – Iterator

1

मैं एक ही मुद्दा मिल गया था और RStudio का उपयोग करते समय मैं इसे हल किया।

संपादक में, मैं अपनी आर फ़ाइल के लिए "स्रोत पर सहेजें" विकल्प को चेक करता हूं जिसमें फ़ंक्शन शामिल है। जैसे-जैसे मैं इसे संपादित करता हूं, हर बार जब मैं इसे संपादित करता हूं (एक अच्छी आदत मुझे लगता है), मेरे आर वर्कस्पेस में लोड किए गए संबंधित फ़ंक्शंस हमेशा अद्यतित होते हैं।

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