R从依赖中抑制startupMessages

时间:2011-06-08 13:52:59

标签: r

我的R包的一个依赖项在加载时显示启动消息。我想抑制这些启动消息。

我到目前为止找到的唯一解决方法是从我的DESCRIPTION文件中的Depends:行中删除有问题的包。然后在我的软件包的suppressPackageStartupMessages(require("offendingPackage"))中调用.onLoad

我宁愿将违规包保留为我的Depends的一部分,但似乎依赖中指定的任何内容都会被自动加载,因此无法被压制。

3 个答案:

答案 0 :(得分:38)

当且仅当启动消息实际用suppressPackageStartupMessages()编写时,packageStartupMessage()函数才有效 - 请参阅帮助页面。

许多软件包只使用cat(),可以考虑使用buglet。在那种情况下

 suppressMessages(library(foo))

效果更好。

答案 1 :(得分:22)

如果您使用命名空间,则可以在Imports中指定包,并使用importimportFrom加载必要的功能。这样,包没有附加,但包可以加载和使用必要的功能。如果没有附加,则不会给出启动消息,因此这种方法可以确保您不会在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
>