9

我正在尝试在 R 中创建一个包,其中我创建了许多新的自定义类。每个类都在不同的文件中。类从父类继承并继承到其他类。

在运行我的代码时,我这样称呼它们

source("package/father.R")
source("package/son.R")
source("package/grandson.R")     

孙类中定义的孙类需要的一些方法的定义。我使用 package.skeleton() 来调用它们中的每一个并创建一个包,它似乎工作正常。但是在运行 R CMD Check(以及尝试安装到 R 中)时,它会抛出一个错误,因为该函数会尝试按字母顺序调用文件,因此文件 grandson.R 在 son.R 之前被调用,它会显示错误提示方法尚未定义。如果我将名称更改为 zgrandson.R,R 会最后调用该文件,并且一切似乎都工作正常,但这显然不是解决问题的方法。

我已经阅读了创建包的教程,但它们似乎都处理了在 R 中没有继承/调用其他文件的简单情况。希望我已经让自己清楚了。

4

1 回答 1

6

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

引用编写 R 扩展手册

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

因此,您可以指定:

Collate:
  father.r
  son.R
  grandson.r

或者只是重命名文件,使字典排序顺序会产生正确的整理顺序,正如您在问题中指出的那样。


但也请参阅@DirkEddelbuettel 在类似问题上的回答

于 2012-09-07T06:08:12.453 回答