【问题标题】:Making R-Package: NAMESPACE制作 R 包:命名空间
【发布时间】:2015-05-25 20:45:32
【问题描述】:

我正在创建一个 R 包,我正处于我 BUILD 包的步骤。

我已阅读 Writing R Extensions 关于 NAMESPACE 的文档(更具体地说,关于导入、导出和注册 S3 方法的第 1.5.1 和 1.5.2 节)。

我很担心这一步,因为当我CHECKmy 包裹时,我收到了这个警告:

发现以下明显的 S3 方法已导出但未注册: print.myClass print.myOtherClass summary.myClass summary.myOtherClass 请参阅“编写 R 扩展”中的“注册 S3 方法”部分 手册。

任何有助于解读不注册 S3 方法的后果以及关于一般 NAMESPACE 文件的任何帮助都会让我很开心。

感谢您的帮助。

【问题讨论】:

    标签: r package


    【解决方案1】:

    我敢以 10:1 打赌你写了类似的东西

    export(print.myClass)
    

    在命名空间中。相反,您需要编写

    S3method(print, myClass)
    

    【讨论】:

    • 感谢 Cliff,我确实发现注册方法的“正确”方式是在 NAMESPACE 文件中添加 S3method(print, myClass)。你知道注册方法的作用吗?看起来我的包在没有注册的情况下工作得很好。另外,关于如何注册我的所有方法,你能给我一个提示吗?目前,我正在使用记事本编辑 NAMESPACE,我不敢相信没有更好的方法。
    • 好的,我发现这很有帮助link。我仍然不清楚发生了什么,但它正在到达那里。
    • 我相信您知道,如果您不导出对象,用户将无法访问它们。 S3 方法的导出方式略有不同,我认为原因是,如果您有一个没有 .Rd 文件的 S3 方法,R 不会抱怨;它是一个通用函数,所以你不需要告诉用户它做了什么。正如您所注意到的,如果您没有为导出的对象包含 .Rd 文件,您仍然可以构建您的包并且用户仍然可以使用该对象。但 CRAN 将不接受包含没有 .Rd 文件的导出对象的包。他们将接受带有 S3methods 且没有 .Rd 文件的包。
    • 以更高效的方式做事而言;我建议研究 ROxygen 以便更轻松地创建 .Rd 文件,尽管我自己不使用它。如果您要导出的东西太多以至于创建 NAMESPACE 文件非常耗时,我会有点担心:请记住,您只需要导出用户自己将使用的东西;您的所有函数仍然可以访问被屏蔽的对象。如果您的包中包含太多对象,以至于用户直接调用而很难跟踪它们,那么用户可能会不知所措。
    • 要使用 roxygen 适当地记录这一点,请参阅 stackoverflow.com/questions/29360132/…stackoverflow.com/questions/7198758/…
    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 2012-01-12
    • 1970-01-01
    • 2013-02-22
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多