【问题标题】:Do I have to export functions conditionally imported via :: in R?我是否必须导出通过 R 中的 :: 有条件地导入的函数?
【发布时间】:2013-09-16 20:41:32
【问题描述】:

我正在从其类在各种 R 包中定义的对象中提取信息。例如,我从各种统计模型中提取系数(并不总是使用 coef 方法)。我通常不必导入这些包,因为我定义了一个通用函数,用户可以为其添加方法。每种统计模型都有一种方法,如果用户只对一种特定的模型类型感兴趣,那么导入所有这些模型定义将是愚蠢的。

然而,在某些情况下,我需要使用包中定义的函数。例如, lme4 包中的 confint.merMod 方法。到目前为止,我使用package::function 调用这些函数并将此命令包装在exists(function) if 条件中,以确保该包确实提供此功能(因为该功能可能仅在某些版本的包中可用) .

但是,我刚刚在http://developer.r-project.org/blosxom.cgi/R-devel/NEWS(参见 2013 年 9 月 5 日)上发现,在 R 版本 3.0.2 中,“'R CMD check' 对声明的包和命名空间进行了更彻底的检查。它报告 [...] '::' 导入的未导出的对象。”

这是否意味着我真的必须将export("function") 添加到 NAMESPACE 文件中? CMD 检查不会因为该函数是有条件地导入而抱怨吗?

【问题讨论】:

  • 当你使用 foo::bar 并且包 foo 没有导出函数 bar 时出现报告(可能意图是foo:::bar,或者错字?),而不是你的包必须导出 bar。
  • 谢谢,这很有意义。我误解了 R-devel 新闻中的引述。
  • 但是,您也将开始遇到其他麻烦。 confint.merMod 不是从lme4 导出的,CRAN 维护人员也在打击::: 的使用。您可能应该给 lme4 维护者 (bbolker+lme4@gmail.com) 发送电子邮件或在 github.com/lme4/lme4/issues 上打开一个问题,以进一步讨论这一点...

标签: r import namespaces export


【解决方案1】:

为将来的访问者澄清/总结...

问题中引用的 R-devel 新闻与现在 3-0-branch NEWS 文件相关,其中 specific entry 列出了 R CMD check 的特定案例将为发现的包和函数的导入、使用和声明问题生成报告。

如果您对特定警告有疑问,该列表值得一看。

如需更多(和更深入的)信息,请参阅wiki page 以获取指向编写 R 扩展R 开发指南和其他有用信息的链接。

【讨论】:

    猜你喜欢
    • 2017-08-28
    • 1970-01-01
    • 2019-03-24
    • 2010-09-12
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多