【发布时间】: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