在R中创建包时链接多个文件

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中没有继承/调用其他文件的简单情况.希望我已经清楚了.

And*_*rie 6

据我所知,您可以使用文件中的Collate字段DESCRIPTION来控制它.

引自写作R扩展手册:

当处理包安装时,"整理"字段可用于控制包中R代码文件的整理顺序.默认设置是根据"C"语言环境进行整理.如果存在,则整理规范必须列出程序包中的所有R代码文件(将可能的特定于OS的子目录,请参阅Package子目录)列为相对于R子目录的以空格分隔的文件路径列表.需要引用包含空格或引号的路径.将使用特定于操作系统的归类字段('Collat​​e.unix'或'Collat​​e.windows')代替'Collat​​e'.

所以,你可以指定:

Collate:
  father.r
  son.R
  grandson.r
Run Code Online (Sandbox Code Playgroud)

或者简单地重命名文件,使得词典排序顺序将产生正确的整理顺序,如您在问题中所指出的那样.


但是@DirkEddelbuettel在类似的问题上也看到了这个答案.