2012-11-22 29 views
10

का उपयोग करते समय S4 विधियों को लोड करने के क्रम में निर्दिष्ट करने के लिए कैसे करें, मैं पहले से ही कई बार समस्या का सामना कर रहा हूं।roxygen2

#' the class classA 
#' 
#' This is a class A blabla 
#' \section{Slots}{\describe{\item{\code{A}}{a Character}}} 
#' @ name classA 
#' @rdname classA 
#' @exportClass classA 
setClass("classA",representation(A="character")) 

और classB.R

#' the class classB 
#' 
#' This is a class B blabla 
#' \section{Slots}{\describe{\item{\code{B}}{an object of class A}}} 
#' @ name classB 
#' @rdname classB 
#' @exportClass classB 
setClass("classB",representation(B="classA")) 

मैं मानना ​​इन फ़ाइलों roxygen2 द्वारा वर्णमाला के क्रम में पढ़ रहे थे, लेकिन यह है कि:

आप दो वर्गों, classA और classB निम्न फ़ाइलें classA.R में वर्णित है कहो ऐसा नहीं है।

roxygenize("./myExample") 
Error in getClass(Class, where = topenv(parent.frame())) : 
    "ClassA" is not a defined class 

कैसे मुझे यकीन है कि roxygenize() जानता है जो क्रम में फ़ाइलों को पढ़ने के लिए कर सकते हैं, यानी कि जो वर्ग परिभाषा अन्य से पहले पढ़ा जाना चाहिए: यदि मैं पैकेज बनाने की कोशिश, मैं निम्नलिखित त्रुटि आ सकती है?


नोट: मुझे पता है कि मैंने अपने स्वयं के प्रश्न का उत्तर दिया। ऐसा इसलिए है क्योंकि मैं अक्सर इस समस्या में भाग गया, और roxygen2 के कोड को देखने के बाद ऐसा करने का उचित तरीका महसूस किया। तो संदर्भ के लिए, यहां मेरे निष्कर्ष हैं।

?collate_roclet में वर्णित है, आप जो वर्ग जो पहले पढ़ा जाना चाहिए निर्दिष्ट करने के लिए @include टैग का उपयोग कर सकते हैं:

उत्तर

10

वहाँ इस लक्ष्य को हासिल करने के लिए दो तरीके हैं। इस मामले में, आप फ़ाइल classB.r सही वास्तविक आर कोड से पहले निम्न पंक्ति को जोड़ सकते हैं:

#' @include classA.r 

ये टैग विशेष रूप से पढ़ा जाता है DESCRIPTION फ़ाइल में Collate क्षेत्र अद्यतन करने के लिए, और निपटने की सिफारिश कर सकते हैं समस्या के साथ।

कुछ मामलों में निर्भरता इतनी जटिल हो सकती है कि आप स्वयं को एक सिंहावलोकन रखना चाहते हैं और अपने कोडबेस में @include टैग जोड़ने पर पूरी तरह भरोसा नहीं करते हैं। उस मामले में आप सिर्फ DESCRIPTION फ़ाइल के अंत में Collate क्षेत्र निर्दिष्ट कर सकते हैं, इस तरह:

Package: myExample 
Type: Package 
... 
Collate: 
    'classA.R' 
    'classB.R' 

समारोह roxygenize() पहले चेकों DESCRIPTION फ़ाइल, और भार जो कुछ फ़ाइलों आदेश वे 'में पहली वहाँ निर्दिष्ट कर रहे हैं फिर निर्दिष्ट केवल तभी शेष पैकेज लोड हो गया है।

+0

मुझे लगता है कि आपने '@ शामिल' टैग को याद किया है ... – hadley

+0

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

+0

'शामिल' को कोलेट से अलग कुछ भी नहीं बदला जाना चाहिए। क्या आप एक न्यूनतम प्रतिलिपि उदाहरण प्रदान कर सकते हैं? – hadley