2017-10-20 90 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

我很欣赏提供的链接进行格式化。学习如何使用堆栈溢出:) –