有没有办法在用户加载 library(myCustomLibrary)
时显示一条消息?
加载完成后,我希望显示一条消息告诉用户如何运行所有测试函数。
快速要点(更新于2021年):
如果你的软件包有一个NAMESPACE,则以前可以在.onLoad()
中执行此操作,但现在必须使.onLoad()
“静默”。
如果您的软件包有一个NAMESPACE,则可以在.onAttach()
中调用,最好通过packageStartupMessage()
进行调用(可以在无法使用cat()
或message()
的情况下抑制它)。
如果您的软件包没有NAMESPACE,则现在必须添加一个(以前可以在.First.lib()
中执行此操作)-几年前,NAMESPACE已经成为强制性的了。
无论哪种方式,请使用packageStartupMessage()
而不是cat()
,这样用户就可以选择禁止此选项。
.onLoad
、.onAttach
或 .First.lib
函数来在包加载时执行想要完成的任务。建议查看这些函数的帮助文档。如果是使用命名空间,应该使用 .onLoad
;否则使用 .First.lib
。zzz.R
文件中,该文件仅用于处理与包相关的代码。更新的答案(2019):
在“Good practice”帮助部分的? .onAttach
中,现在的建议是:
应尽可能使用
.onLoad
静默地加载命名空间, 启动消息由.onAttach
给出。 这些消息(以及来自.onLoad
的任何必要消息)应该使用packageStartupMessage
,这样它们可以在分散注意力时被静音。
R CMD CHECK
将抱怨 .onLoad
不是静音的...
R/zzz.R
-- 现在这主要是一种惯例。我认为你同样可以使用R/onLoad.R
。 - Dirk Eddelbuettel.onAttach()
而不是.onLoad()
来实现该目的。他没有解释为什么。 - jangorecki.onLoad()
而不是.onAttach()
中给出一个注释。我的理由是:如果你使用package::function()
调用一个函数,如果它在.onAttach()
中,启动消息将不会显示。在某些情况下,源或引用可能仍然未知。 - MS BerendsR CMD check
测试保持一致。标准会改变,但由于NAMESPACES
现在已经普遍存在并且是必需的,这些区别有些意义。 - Dirk Eddelbuettel