【问题标题】:Linking multiple files while creating a package in R在 R 中创建包时链接多个文件
【发布时间】:2012-09-01 00:04:12
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • “如果我将名称更改为 zgrandson.R,R 会最后调用该文件,一切似乎都正常,但这显然不是解决问题的方法。”为什么?这正是我使用的解决方案以及许多其他解决方案(以00Classes.R 之类的内容开始第一个脚本)。
  • 这工作正常,但看起来像解决问题的丑陋/骇人听闻的方式:D。感谢您让我知道其他人也在使用此解决方法。虽然我想知道问题是否出在我的代码结构本身,因为我经历过的优秀程序员的脚本似乎都没有调用其他文件。

标签: r class inheritance packages


【解决方案1】:

据我了解,您可以使用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 讨论类似问题。

【讨论】:

  • 完美答案!非常感谢您的超级快速回复:)
猜你喜欢
  • 2011-04-20
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
  • 2017-06-22
相关资源
最近更新 更多