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

时间:2012-09-07 05:52:04

标签: r class inheritance packages

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

1 个答案:

答案 0 :(得分:6)

据我了解,您可以使用Collate文件中的DESCRIPTION字段来控制此内容。

引用Writing R Extensions manual

  

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

所以,您可以指定:

Collate:
  father.r
  son.R
  grandson.r

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


但是,@ DirkEddelbuettel也会在类似的问题上看到this answer