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