Ale*_*eph 9 inheritance packages r class
我正在尝试在R中创建一个包,其中我创建了许多新的自定义类.每个类都在不同的文件中.Classes继承自父类并继承到其他类.
在运行我的代码时,我会像这样打电话给他们
source("package/father.R")
source("package/son.R")
source("package/grandson.R")
Run Code Online (Sandbox Code Playgroud)
Son类中定义的孙子类所需的一些方法的定义.我使用package.skeleton()来调用它们并创建一个包,它似乎工作正常.但是当运行R CMD Check(以及尝试安装到R中)时,它会抛出一个错误,因为该函数试图按字母顺序调用文件,因此在son.R之前调用文件grandson.R并显示错误说方法尚未定义.如果我将名称更改为zgrandson.R,则R将该文件称为最后一个,并且一切似乎都正常,但这显然不是问题的解决方案.
我已经阅读了创建包的教程,但是所有这些教程似乎都处理了R中没有继承/调用其他文件的简单情况.希望我已经清楚了.
据我所知,您可以使用文件中的Collate
字段DESCRIPTION
来控制它.
引自写作R扩展手册:
当处理包安装时,"整理"字段可用于控制包中R代码文件的整理顺序.默认设置是根据"C"语言环境进行整理.如果存在,则整理规范必须列出程序包中的所有R代码文件(将可能的特定于OS的子目录,请参阅Package子目录)列为相对于R子目录的以空格分隔的文件路径列表.需要引用包含空格或引号的路径.将使用特定于操作系统的归类字段('Collate.unix'或'Collate.windows')代替'Collate'.
所以,你可以指定:
Collate:
father.r
son.R
grandson.r
Run Code Online (Sandbox Code Playgroud)
或者简单地重命名文件,使得词典排序顺序将产生正确的整理顺序,如您在问题中所指出的那样.
但是@DirkEddelbuettel在类似的问题上也看到了这个答案.