आर

2012-09-07 6 views
8

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

मेरे कोड चल रहा जबकि मैं बेटा कक्षा में परिभाषित में पोता क्लास द्वारा आवश्यक तरीकों में से कुछ के लिए यह

source("package/father.R") 
source("package/son.R") 
source("package/grandson.R")  

परिभाषा की तरह उनमें से प्रत्येक कहते हैं। मैं उनमें से प्रत्येक को कॉल करने और पैकेज बनाने के लिए package.skeleton() का उपयोग करता हूं और ऐसा लगता है कि यह ठीक काम करता है। लेकिन आर सीएमडी चेक (और आर में स्थापित करने का प्रयास करते समय) चलाते समय, यह एक त्रुटि फेंकता है क्योंकि फ़ंक्शन फ़ाइलों को वर्णानुक्रम में कॉल करने का प्रयास करता है और इसलिए फ़ाइल पोते हैं। आर को बेटे के सामने बुलाया जाता है। आर और यह दिखाता है और त्रुटि देता है कि विधियों को परिभाषित नहीं किया गया है। यदि मैं नामों को zgrandson.R में बदलता हूं, आर ने उस फ़ाइल को अंतिम कहा, और सब कुछ ठीक काम करता प्रतीत होता है, लेकिन यह स्पष्ट रूप से समस्या का समाधान नहीं है।

मैंने पैकेज बनाने के लिए ट्यूटोरियल पढ़े हैं, लेकिन उनमें से सभी साधारण मामलों से निपटने लगते हैं जहां आर आशा में कोई विरासत/कॉलिंग नहीं है। आशा है कि मैंने खुद को स्पष्ट कर दिया है।

+0

पहली पोस्ट पर अच्छा काम। –

+2

"अगर मैं zgrandson.R में नाम बदलता हूं, आर ने उस फ़ाइल को अंतिम कहा, और सब ठीक काम करने लगता है, लेकिन यह स्पष्ट रूप से समस्या का समाधान नहीं है।" क्यूं कर? यह वही समाधान है जिसका मैं उपयोग करता हूं और कई अन्य भी ('00Classes.R'' जैसी कुछ स्क्रिप्ट शुरू करें)। –

+0

यह ठीक काम कर रहा है, लेकिन समस्या को हल करने के लिए ऐसे बदसूरत/हैकिश तरीके की तरह दिख रहा था: डी। मुझे यह बताने के लिए धन्यवाद कि अन्य लोग इस कामकाज का भी उपयोग कर रहे हैं। हालांकि मुझे आश्चर्य है कि समस्या मेरे कोड संरचना के साथ ही है, क्योंकि मेरे द्वारा चलाए गए अच्छे प्रोग्रामर द्वारा लिपियों में से कोई भी अन्य फाइलों को कॉल करने लगता है। –

उत्तर

5

जहां तक ​​मैं समझता हूं, आप इसे नियंत्रित करने के लिए DESCRIPTION फ़ाइल में Collate फ़ील्ड का उपयोग कर सकते हैं।

Writing R Extensions manual से हवाला देते हुए:

एक 'कोलेट' फ़ील्ड के लिए मिलान के क्रम को नियंत्रित करने के लिए एक पैकेज में आर कोड फ़ाइलों जब इन पैकेज स्थापना के लिए कार्रवाई की जाती है के लिए इस्तेमाल किया जा सकता है। डिफ़ॉल्ट 'सी' लोकेल के अनुसार collate है। वर्तमान हैं, कोलेट विनिर्देश पैकेज में सभी आर कोड फ़ाइलों को सूचीबद्ध करना चाहिए रास्तों आर उपनिर्देशिका के सापेक्ष फ़ाइल की एक व्हाइटस्पेस से अलग सूची के रूप में (खाते में संभव ओएस विशेष उपनिर्देशिका ले, पैकेज उपनिर्देशिका देखें)। सफेद स्थान वाले पथ या उद्धरण उद्धृत करने की आवश्यकता है। 'कोलेट' के बजाय एक ओएस-विशिष्ट collation फ़ील्ड ('Collate.unix' या 'Collate.windows') का उपयोग किया जाएगा।

तो, आप निर्दिष्ट कर सकते हैं:

Collate: 
    father.r 
    son.R 
    grandson.r 

या बस इस तरह से कि कोषगत छंटाई क्रम सही मिलान के क्रम में परिणाम होगा, जैसा कि आप अपने प्रश्न में संकेत में फ़ाइलों का नाम।


लेकिन यह भी एक समान प्रश्न पर this answer देख @DirkEddelbuettel द्वारा।

+0

बिल्कुल सही जवाब! सुपर त्वरित उत्तर के लिए बहुत बहुत धन्यवाद :) –