2012-09-07 121 views
8

我想在R中创建一个包,其中我创建了很多新的自定义类。每个班级都在不同的文件中。类从父类继承并继承到其他类。链接多个文件,同时在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中没有继承/调用其他文件的简单情况。希望我已经说清楚了。

+0

第一篇文章很不错。 –

+2

“如果我将名称更改为zgrandson.R,R将该文件称为最后一个文件,并且所有内容似乎都可以正常工作,但显然这不是解决问题的办法。”为什么?这正是我使用的解决方案以及其他许多方法(以'00Classes.R'开始第一个脚本)。 –

+0

这工作正常,但看起来像这样一个丑陋/ hackish方式来解决问题:D。感谢您告诉我其他人也在使用此解决方法。虽然我不知道这个问题是否与我的代码结构本身有关,因为我经历过的好程序员的脚本似乎都没有调用其他文件。 –

回答

5

据我所知,你可以使用DESCRIPTION文件中的Collate字段来控制这个。

Writing R Extensions manual引用:

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

所以,你可以指定:

Collate: 
    father.r 
    son.R 
    grandson.r 

或者干脆以这样的方式字典排序顺序将导致正确的排序顺序,当你在你的问题表明重命名文件。


但也可以通过@DirkEddelbuettel在类似的问题上看到this answer

+0

完美答案!非常感谢超级快速回复:) –

相关问题