2013-02-11 10 views
6

मेरे पास एक पैकेज है जो treemap से tmPlot फ़ंक्शन का उपयोग करता है, लेकिन जब मैं फ़ंक्शन का उपयोग करने का प्रयास करता हूं, तो यह एक त्रुटि फेंकता है कि इसकी निर्भरताओं में से कोई एक लोड नहीं होता है:tmPlot नामस्थान में है, लेकिन इसकी निर्भरता

Error in tmPlot(data, index = index, vSize = vSize) : 
    could not find function "brewer.pal" 

निर्भरता स्थापित है और नामस्थान में।

यह सवाल, सेटअप का एक छोटा सा है एक पैकेज समस्या जा रहा है, लेकिन मैं इसे के रूप में संभव के रूप में कम से कम करने की कोशिश की है:

सुनिश्चित करें कि आप treemap (और उसके सभी निर्भरता) स्थापित किया है।

मैंने 'anRpackage' नामक एक निर्देशिका बनाई है। अंदर यह एक फ़ोल्डर ('आर') और निम्न पाठ वाली एक वर्णन फ़ाइल है:

Package: anRpackage 
Title: What the package does (short line) 
Version: 1.0 
Author: Who wrote it 
Maintainer: Who to complain to <[email protected]> 
Description: More about what it does (maybe more than one line) 
License: What license is it under? 
Imports: 
    treemap 
Collate: 
    'maketree.R' 

आर/फ़ोल्डर के अंदर एक भी आर 'maketree.R' नामक फ़ाइल है। इसकी सामग्री हैं:

#' maketree 
#' 
#' @importFrom treemap tmPlot 
#' @export maketree 

maketree <- 
function(data, index, vSize){ 
    tmPlot(data, index=index, vSize=vSize) 
} 

मान लें कि आप 'anRpackage' ऊपर निर्देशिका में कर रहे हैं, निम्न स्क्रिप्ट चलाएँ:

library(roxygen2) 
roxygenise("anRpackage/") 

library(devtools) 

build("anRpackage") 
install("anRpackage") 

पुनः प्रारंभ आर (अधिमानतः --vanilla के साथ) और रन निम्नलिखित:

library(anRpackage) 

data(mtcars) 
maketree(mtcars, "cyl", "mpg") 

आपको त्रुटि मैं जैसा वर्णित मिलना चाहिए शुरू निंग। ऐसा क्यों होता है? RColorBrewer को treemap के रूप में सूचीबद्ध किया गया है, इसलिए इसे स्वचालित रूप से आयात किया जाना चाहिए, है ना?

+0

कोशिश जोड़ने 'आयात RColorBrewer'। यह पैकेज स्वचालित रूप से 'treemap' द्वारा लोड नहीं किया जा सकता है या शायद यह करता है लेकिन पेड़ मानचित्र से केवल एक फ़ंक्शन को कॉल करना 'RColorBrewer' को कॉल नहीं करता है। –

+1

@TylerRinker यह इतना नहीं है कि मुझे समस्या के लिए कोई फिक्स चाहिए (समस्या को आसानी से 'लाइब्रेरी (treemap)' जोड़कर ठीक किया जा सकता है)। यह और भी है कि मैं जानना चाहता हूं कि यह समस्या क्यों हो रही है, जब मेरी समझ से, ऐसा नहीं होना चाहिए। मुझे समझ में नहीं आता क्यों कुछ पैकेजों को मैन्युअल रूप से लोड करने की आवश्यकता है और दूसरों को नहीं। –

उत्तर

10

समस्या ट्री-मैप के साथ वास्तव में है। treemapbrewer.pal का उपयोग करता है, और इसलिए Imports: RColorBrewer और importFrom(RColorBrewer, brewer.pal) होना चाहिए।

यह अब खड़ा के रूप में, सब कुछ ठीक उपयोगकर्ता कहते हैं अगर library(treemap), ट्री-मैप और RColorBrewer search() पथ से जुड़े होते हैं है, और जब tmPlotbrewer.pal मूल्यांकन किया जाता है खोज पथ पर पाया जाता है। बेशक पैकेज तोड़ देगा यदि उपयोगकर्ता brewer.pal="yeast" या कुछ कहना था, क्योंकि गलत प्रतीक मिलेगा; यह नाम स्थान के कारणों में से एक है, जो उपयोगकर्ता द्वारा किए जा सकने वाले ट्रेमैप के कार्यों की रक्षा के लिए है।

लेकिन जब आप (सही ढंग से) आयात करते हैं तो क्या होता है: treemap? treemap लोड किया गया है (स्मृति में) लेकिन न तो treemap और न ही इसकी निर्भरता संलग्न हैं (खोज पथ के लिए)। तो brewer.pal नहीं मिला है।

यदि ट्रेमैप आयात करना था: RColorBrewer, तो brewer.pal दोनों पाएंगे जब ट्रेमैप को library(treemap) पर कॉल द्वारा खोज पथ से जोड़ा गया था, और जब केवल आपके पैकेज में आयात किया गया था।

ट्रेमैप के रखरखाव से संपर्क करें और उन्हें अपने नाम स्थान का निर्माण करने के लिए और अधिक सावधानीपूर्वक काम करने के लिए कहें।

+2

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

+0

सहमत, अच्छी व्याख्या +1 –

+0

तो क्या मुख्य समस्या यह है कि वे आयात कर रहे हैं आयात के बजाय निर्भर करता है या उनके NAMESPACE में उपयुक्त बयान अनुपलब्ध हैं? –

0

मुझे लगता है कि यह फ़ाइल में के बजाय Imports का उपयोग करने के तथ्य के कारण है।

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

यदि आप Imports: treemap का उपयोग करते हैं, तो केवल निर्दिष्ट नामस्थान आयात किया जाता है, यानी आप अपने कार्यों में treemap चर का उपयोग कर सकते हैं। लेकिन ऐसा लगता है कि इस मामले में treemap निर्भरताओं को लोड नहीं किया गया है।

तो मुझे लगता है कि आपको या तो Depends: treemap का उपयोग करना चाहिए (लेकिन ऐसा लगता है कि Imports का उपयोग इन दिनों प्रचारित है), या सीधे अपने पैकेज से RColorBrewer आयात करें।

क्षमा करें, यकीन नहीं यह वास्तव में आपके प्रश्न के उत्तर, और आप पहले से ही इन बातों के सभी पूरी तरह से जागरूक किया जा सकता है ...

1

tmPlot (डेटा, सूचकांक = सूचकांक, vSize = vSize) कॉल करने से पहले, आप RColorBrewer लोड करने के लिए की जरूरत है:

की आवश्यकता होती है (RColorBrewer)

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