【发布时间】:2010-02-03 13:55:22
【问题描述】:
有没有办法在用户加载library(myCustomLibrary) 时显示消息?
加载后,我想显示一条消息,告诉用户如何运行所有测试功能。
【问题讨论】:
有没有办法在用户加载library(myCustomLibrary) 时显示消息?
加载后,我想显示一条消息,告诉用户如何运行所有测试功能。
【问题讨论】:
快速要点(以及 2021 年更新的编辑):
如果你的包有一个 NAMESPACE,那么 .onLoad() 是你曾经这样做的地方:但 .onLoad() 被要求是“静默”的
如果你的包有一个 NAMESPACE,那么.onAttach() 是可以调用的地方,最好是通过packageStartupMessage()(可以在cat() 或message() 不能调用的地方抑制
如果您的包没有 NAMESPACE,那么您现在必须添加一个(而 .First.lib() 是您以前这样做的地方)- NAMESPACE 几年来一直是强制性的
无论哪种方式,请使用packageStartupMessage() 而不是cat(),以便用户可以选择禁止此操作。
【讨论】:
R/zzz.R——现在这主要是一种约定。我认为您也可以使用R/onLoad.R。
.onAttach() 而不是.onLoad()。他没有解释原因。 r-pkgs.had.co.nz/r.html#r-code
.onLoad() 而不是 .onAttach() 中给出注释。我的理由是:如果你使用package::function()调用一个函数,如果它在.onAttach()中,启动消息将不会显示。在某些情况下,来源或参考文献仍然未知。
R CMD check 测试。标准发生了变化,但由于 NAMESPACES 现在很常见,并且要求这些区别具有一定的意义。
是的。您可以使用.onLoad、.onAttach 或.First.lib 函数在加载包时执行任何您想做的事情。我建议查看这些功能的帮助。您可以将.onLoad 与命名空间一起使用,而将.First.lib 不使用。
一个约定是人们经常将这些命令放在一个单独的zzz.R 文件中,该文件仅用于与包相关的代码。
【讨论】:
更新答案(2019 年):
在?.onAttach 的帮助部分“良好做法”中,现在的建议是:
加载命名空间 [= in
.onLoad] 应尽可能保持静默, 带有 .onAttach 给出的启动消息。 这些消息(以及来自 .onLoad 的任何重要消息)应该使用packageStartupMessage这样他们就可以在会分散注意力的地方保持沉默。
如果.onLoad 不沉默,R CMD CHECK 会抱怨...
【讨论】: