【问题标题】:Library/package development - message when loading库/包开发 - 加载时的消息
【发布时间】:2010-02-03 13:55:22
【问题描述】:

有没有办法在用户加载library(myCustomLibrary) 时显示消息? 加载后,我想显示一条消息,告诉用户如何运行所有测试功能。

【问题讨论】:

    标签: r package


    【解决方案1】:

    快速要点(以及 2021 年更新的编辑):

    • 如果你的包有一个 NAMESPACE,那么 .onLoad() 是你曾经这样做的地方:但 .onLoad() 被要求是“静默”的

    • 如果你的包有一个 NAMESPACE,那么.onAttach() 是可以调用的地方,最好是通过packageStartupMessage()(可以在cat()message() 不能调用的地方抑制

    • 如果您的包没有 NAMESPACE,那么您现在必须添加一个(而 .First.lib() 是您以前这样做的地方)- NAMESPACE 几年来一直是强制性的

    • 无论哪种方式,请使用packageStartupMessage() 而不是cat(),以便用户可以选择禁止此操作。

    【讨论】:

    • 确实是+1。我必须把这个放在哪里?我的包的哪个文件?
    • 它曾经很重要,人们使用R/zzz.R——现在这主要是一种约定。我认为您也可以使用R/onLoad.R
    • 在 Hadley 的书中提到用户应该为此目的使用.onAttach() 而不是.onLoad()。他没有解释原因。 r-pkgs.had.co.nz/r.html#r-code
    • 令我失望的是,即使 R CMD 检查现在也会在 .onLoad() 而不是 .onAttach() 中给出注释。我的理由是:如果你使用package::function()调用一个函数,如果它在.onAttach()中,启动消息将不会显示。在某些情况下,来源或参考文献仍然未知。
    • 我主要不喜欢围绕这两个函数的非直观语言,但在 20 多年的包编写过程中,我普遍发现 Writing R Extensions 既具有权威性,又具有一致性与R CMD check 测试。标准发生了变化,但由于 NAMESPACES 现在很常见,并且要求这些区别具有一定的意义。
    【解决方案2】:

    是的。您可以使用.onLoad.onAttach.First.lib 函数在加载包时执行任何您想做的事情。我建议查看这些功能的帮助。您可以将.onLoad 与命名空间一起使用,而将.First.lib 不使用。

    一个约定是人们经常将这些命令放在一个单独的zzz.R 文件中,该文件仅用于与包相关的代码。

    【讨论】:

      【解决方案3】:

      更新答案(2019 年):

      ?.onAttach 的帮助部分“良好做法”中,现在的建议是:

      加载命名空间 [= in .onLoad] 应尽可能保持静默, 带有 .onAttach 给出的启动消息。 这些消息(以及来自 .onLoad 的任何重要消息)应该使用 packageStartupMessage 这样他们就可以在会分散注意力的地方保持沉默。

      如果.onLoad 不沉默,R CMD CHECK 会抱怨...

      【讨论】:

        猜你喜欢
        • 2012-01-30
        • 1970-01-01
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-06
        • 2014-06-02
        相关资源
        最近更新 更多