में अनुकरण की S3 और S4 तरीकों का उपयोग कर मैं त्रुटिआर एक ही पैकेज
found an S4 version of 'simulate' so it has not been imported correctly
मैं एक आर पैकेज है कि एक S3 पद्धति के रूप में एक अनुकरण() विधि के लिए एक परिभाषा शामिल लिखा है से हैरान हूँ। चूंकि अनुकरण के लिए सामान्य पहले ही परिभाषित किया गया है, इसलिए मैं बस एक simulate.myclass (simulate.fitContinuous मेरे मामले में) परिभाषित करता हूं।
पैकेज यह भी एक अन्य पैकेज पर निर्भर करता है जिसमें अनुकरण का एस 4 संस्करण है। मेरे पैकेज को लोड करते समय, मुझे उपरोक्त एस 4 संस्करण त्रुटि मिलती है। मुझे यकीन नहीं है कि त्रुटि का उत्पादन क्या हो रहा है। package from github, या हथियाने द्वारा
प्रतिलिपि प्रस्तुत करने योग्य उदाहरण
require(devtools)
install_github("pmc", "cboettig")
require(pmc)
खरोंच से इस त्रुटि पुन: पेश करने के लिए कार्य करें: कम से कम वर्णन फ़ाइल से एक नया पैकेज बनाएँ। विवरण आयात शामिल करें: आउच। एक NAMESPACE बनाएं और आयात (ouch) और S3method (अनुकरण, परीक्षण) जोड़ें। आर निर्देशिका बनाएँ, एक छोटी सी आर स्क्रिप्ट जोड़ने (मैंने सम्मिलित कर दिया roxygen प्रलेखन कि NAMESPACE मैं सिर्फ उल्लेख किया है उत्पन्न होगा, लेकिन इस त्रुटि भी बिना DevTools/roxygen बनाया जा सकता है):
#' simulate
#'
#' a test for s3/s4 conflicts
#' @param object who cares?
#' @param nsim guess.
#' @param seed yup
#' @param ... other parameters we will just ignore
#' @return something
#' @method simulate test
#' @S3method simulate test
#' @import ouch
simulate.test <- function(object, nsim = 1, seed = NULL, ...){
message("This test worked")
}
स्थापित करें पैकेज (यदि आप चाहें तो devtools के साथ दस्तावेज़), और आपको त्रुटि मिलती है।
मेरा सबसे अच्छा समाधान अब तक NAMESPACE से S3method लाइन को खत्म करना है, और इसके बजाय पूर्ण फ़ंक्शन simulate.test निर्यात करना है। यह बिना किसी चेतावनी के चेक और इंस्टॉल हो जाएगा, लेकिन स्पष्ट रूप से एक निम्न समाधान है।
एक अलग समाधान आउच में निर्भर करता है साथ ही आयात करता है, और S3 विधि को ठीक से (जैसा ऊपर) दस्तावेज करता है। तब सबकुछ अपेक्षित काम करता है, लेकिन चेतावनी संदेश बनी हुई है।
ध्यान दें कि आयात के बजाय निर्भर करता है, और S3method (अनुकरण, परीक्षण) लाइन को रखने से कोई त्रुटि उत्पन्न नहीं होती है, बल्कि यह भी सही व्यवहार उत्पन्न नहीं करती है। – cboettig