我正在研究R包并导入某个库。我正在创建一个从导入的库继承一个类的类。
在我的DESCRIPTIONS文件中,我有:
...
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”
我尝试了几种不同的方法来解决这个问题。这似乎是某人之前必须面对的那种问题,但到目前为止我无法找到谷歌如何正确地做到这一点。感谢您提前提供任何帮助。
答案 0 :(得分: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