我的R包的一个依赖项在加载时显示启动消息。我想抑制这些启动消息。
我到目前为止找到的唯一解决方法是从我的DESCRIPTION文件中的Depends:行中删除有问题的包。然后在我的软件包的suppressPackageStartupMessages(require("offendingPackage"))
中调用.onLoad
。
我宁愿将违规包保留为我的Depends的一部分,但似乎依赖中指定的任何内容都会被自动加载,因此无法被压制。
答案 0 :(得分:38)
当且仅当启动消息实际用suppressPackageStartupMessages()
编写时,packageStartupMessage()
函数才有效 - 请参阅帮助页面。
许多软件包只使用cat()
,可以考虑使用buglet。在那种情况下
suppressMessages(library(foo))
效果更好。
答案 1 :(得分:22)
如果您使用命名空间,则可以在Imports
中指定包,并使用import
或importFrom
加载必要的功能。这样,包没有附加,但包可以加载和使用必要的功能。如果没有附加,则不会给出启动消息,因此这种方法可以确保您不会在Imports中看到任何包的启动消息。
确保检查是否导入了重要的所有内容。如果您导入的包依赖于其他包,我不确定是否导入了使用这些函数所需的所有内容。您可能需要做一些令人费解的事情才能获得所需的一切。从好的方面来说,使用Imports
可以确保任何依赖关系检查都能正确执行。
另一种选择是不在Depends
中指定包,而是在DESCRIPTION文件的Suggests
中指定包,并使用@Dirk提供的选项。如果在install.packages()
中设置了'dependencies = TRUE',这将给出正确的依赖性检查。但我个人认为使用名称空间要干净得多。
答案 2 :(得分:0)
在脚本或环境中内联执行此操作的快速方法是重写library()/require()
以包装suppressPackageStartupMessages()
方法:
> library(here) # This shows a message
here() starts at /home/z/development/
> require(here) # This shows a message
Loading required package: here
here() starts at /home/y
解决方法:
> flibrary <- library
> library <- function(...) suppressPackageStartupMessages(flibrary(...))
> library(here) # No messages
>
> frequire <- require
> require <- function(...) suppressPackageStartupMessages(frequire(...))
> require(here) # No messages
>