2016-03-29 7 views
7

मैं एक आर पैकेज विकसित कर रहा हूं जिसे snowfall पैकेज द्वारा उपलब्ध कराए गए समांतरता का उपयोग करने की आवश्यकता है। snowfall ऐसा प्रतीत नहीं होता है जैसे ggplot2, data.table, आदि। मैंने snowfall, rlecuyer, और snow विवरण फ़ाइल में, नाम स्थान फ़ाइल, और फ़ंक्शन में आयात तर्क के रूप में शामिल किया है। जब मैं इस समारोह तक पहुँचने का प्रयास, मैं निम्नलिखित त्रुटि मिलती है:कस्टम आर पैकेज में बर्फबारी आयात करना

Error in sfInit() : could not find function "setDefaultClusterOptions"

sfInit समारोह एक nostart/nostop तर्क है जो यह कहता sfInit की नेस्टेड उपयोग से संबंधित है के लिए लगता है, लेकिन है कि नहीं लगता है मेरे लिए चाल करने के लिए या तो।

वास्तविक कोड अपने आप में एक sfInit का उपयोग करता है (जो है, जहां मैं त्रुटि मिलती है), कुछ sfExport और sfLibrary है, और एक sfLapply

संभावित समाधान: यह काम करता है अगर मैं आयात अनुभाग से snow स्थानांतरित करता हूं, तो डिस्प्शन फ़ाइल में निर्भर करता है। मुझे नहीं पता क्यों यद्यपि।

+3

सिस्टम सेटअप, संस्करण, वास्तविक कोड उन परिचालनों को करने के लिए? पीकेजी की तरह दिखता है: बर्फ ठीक से जुड़ा नहीं जा रहा है। –

+1

मेरे पास विवरण फ़ाइल में बर्फ है और मैं नामस्थान में एक आयात (बर्फ) देख सकता हूं। मैंने समारोह में एक # '@ आयात बर्फ भी जोड़ा। क्या मुझे कुछ और करना चाहिए? – TheComeOnMan

+1

यदि मैं स्पष्ट रूप से रैपर कोड में बर्फ को कॉल करता हूं, तो पैकेज ठीक काम करता है। – TheComeOnMan

उत्तर

2

setDefaultClusterOptionssnow पैकेज से एक फ़ंक्शन है। आपको इसे भी आयात करने की आवश्यकता है।

+1

मेरे पास विवरण फ़ाइल में बर्फ है और मैं नामस्थान में एक आयात (बर्फ) देख सकता हूं।मैंने समारोह में एक # '@ आयात बर्फ भी जोड़ा। क्या मुझे कुछ और करना चाहिए? – TheComeOnMan

+1

यदि मैं स्पष्ट रूप से रैपर कोड में बर्फ को कॉल करता हूं, तो पैकेज ठीक काम करता है। – TheComeOnMan

+3

मैं केवल पूरे पैकेज को आयात करने के बजाय पैकेज के लिए आवश्यक कार्यों को आयात करूंगा। यदि आप roxygen2 का उपयोग करते हैं तो '' # @import बर्फ सेटडिफॉल्टक्लस्टरऑप्शन से 'का उपयोग करें – Thierry

3

जब आप अपने पैकेज को जोड़ते समय 'निर्भर करता है' में एक पैकेज शामिल करते हैं तो वे उस पैकेज को भी संलग्न करते हैं जिस पर आपका पैकेज उनके नामस्थान पर निर्भर करता है।

इस साइट पर other questions में निर्भरता और आयात के बीच यह और अन्य अंतर समझाया गया है।

यदि आप {snowfall} के विवरण को देखते हैं तो आप देखेंगे कि यह {snow} पर निर्भर करता है। यह सराहनीय है कि बर्फबारी के लेखकों को कुछ ऐसा पता है जो हम नहीं करते हैं और {snow} को काम करने के लिए वैश्विक खोज पथ से जोड़ा जाना है। तथ्य यह है सवाल मैं ऊपर लिंक करने के लिए शीर्ष जवाब में शीर्ष चेतावनी है कि ... में

... if your package relies on a package A which itself "Depends" on another package B, your package will likely need to attach A with a "Depends directive.

This is because the functions in package A were written with the expectation that package B and its functions would be attached to the search() path.

तो, आपके मामले में, यह सिर्फ इतना है कि सभी {snowfall} चाहता {snow} है और आप इसे प्रदान करने के लिए हुआ है। हालांकि, ऐसा लगता है कि {snowfall} पर सीधे निर्भर रहने के लिए आपके लिए अधिक सही व्यवहार हो सकता है।

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