2017-10-20 62 views
1

我正在研究R包並導入某個庫。我正在從導入的庫中繼承一個類。在R中,我如何從包中導入的類中繼承一個對象?

在我的記述文件我有:

... 
Imports: 
    importedPackage 

然後,我有一個類聲明:

setClass("mySampleClass", 
    slots = list(
     numUp = "numeric", 
     numDown = "numeric" 
    ), 

    contains = "classToExtend" 
) 

如果我進口importedPackage,我知道我需要從包中引用的功能importedPackage::someFunction()。我不能這樣做,雖然在我的類聲明中有contains =部分。眼下,它告訴我,在製作的時候:

Error in reconcilePropertiesAndPrototype(name, slots, prototype, superClasses, : 
    no definition was found for superclass 「importedPackage::classToExtend」 in the specification of class 「mySampleClass」 

我試圖解決這個幾個不同的方式。這似乎是某人之前必須面對的問題,但目前爲止,我無法找到如何正確執行此操作的問題。感謝您提前提供任何幫助。

+1

所以我沒有做很多與S4,所以這是一個猜測,但你嘗試過什麼這個QA第一個答案說? https://stackoverflow.com/questions/37897002/include-an-s4-object-from-an-existing-package-as-a-slot-in-a-new-s4-class。這似乎也許會照顧你的問題呢? – HFBrowning

+0

有趣的是,這個問題是關於我試圖導入的完全相同的包。我已經嘗試過以及它的幾個變種。它看起來像文件,然後構建好,但在構建它之後,它會執行'library(MyLib)'並且看起來很好,但是接下來當我點擊任何地方時它會發生致命錯誤。 –

回答

0

我有同樣的問題。如果你有S4類有繼承關係和類在不同的.R文件中,然後將含有超(classToExtend)的文件中有子類(mySampleClass)之前加載。

這可以通過使用roxygen2,你在mySampleClass檔案文件包來完成,

#' @include <file name containing classToExtend definition> 

這基本上意味着適用於文件,而不是眼前的代碼行後面以下。

所以這基本上是在描述文件中創建一個整理現場和依賴性均列第一。

於是最後,爲了進行整理操作roxygen,您可能需要手動運行它。

roxygen2::update_collate(<package name>) 

如果你想充分生成文檔,包括任何名稱空間的變化,然後用

devtools::document(<package name>) 

這裏有一個問題,即有關包括整理順序會談:How do I indicate collate order in Roxygen2?

這裏是roxygen2文檔: http://roxygen.org/roxygen2-manual.pdf

+0

嗨Abhiskehk,請格式化你的答案的代碼部分:https://stackoverflow.com/editing-help –

+0

我很欣賞提供的鏈接進行格式化。學習如何使用堆棧溢出:) –