首页 文章

在R中,我如何从包中的导入类中继承对象?

提问于
浏览
1

我正在研究R包并导入某个库 . 我正在创建一个从导入的库继承类的类 .

在我的DESCRIPTIONS文件中,我有:

...
Imports:
    importedPackage

然后我有一个 class 声明:

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

     contains = "classToExtend"
)

如果我要导入importPackage,我知道我需要将该包中的函数引用为 importedPackage::someFunction() . 虽然我的 class 声明中有 contains = 部分,但我不能这样做 . 现在,它在构建时告诉我:

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

我尝试了几种不同的方法来解决这个问题 . 这似乎是某人之前必须面对的那种问题,但到目前为止我无法找到谷歌如何正确地做到这一点 . 在此先感谢您的帮助 .

1 回答

  • 1

    我遇到过同样的问题 . 如果你有继承关系的S4类,并且类在不同的.R文件中,则必须在子类(mySampleClass)之前加载包含超类(classToExtend)的文件 .

    这可以使用roxygen2包来完成,你在mySampleClass文件中记录,

    #' @include <file name containing classToExtend definition>
    

    这基本上意味着应用于该文件而不是下面的紧急代码行 .

    因此,这基本上在DESCRIPTION文件中创建了一个collate字段,并且首先列出了依赖项 .

    最后,为了让roxygen执行整理操作,您可能需要手动运行它 .

    roxygen2::update_collate(<package name>)
    

    如果要完全生成文档,请包含所有NAMESPACE更改,然后使用

    devtools::document(<package name>)
    

    这是一个问题,谈论包括整理顺序:How do I indicate collate order in Roxygen2?

    这是roxygen2文档:http://roxygen.org/roxygen2-manual.pdf

相关问题