【问题标题】:Prevent loading messages package-side防止在包端加载消息
【发布时间】:2020-06-29 13:35:27
【问题描述】:

我已经将一些我经常使用的功能与 roxygen2 放在一个包中,并且一切运行顺利。唯一困扰我的是,在加载包时,我会从所有加载的依赖项中得到一堵文本墙,打印到控制台中。我知道当我使用suppressWarnings(suppressMessages(library("PACKAGE"))) 时可以抑制警告,但我想知道我是否也可以直接在包中设置此选项(可能在 NAMESPACE 中)?这个想法是抑制来自依赖项的警告,我可以指定我自己的文本,在加载包时显示。

我尝试了@NelsonGon 的建议并将其添加到名为zzz.R 的文件中。附加的欢迎文本会按原样打印,但仍会打印来自依赖项的加载消息。

# Welcome message
.onLoad <- function(...){

  invisible(suppressPackageStartupMessages(
    sapply(c("stringi", "stringr",
             "qdapRegex", "readr",
             "tokenizers", "rvest",
             "pryr", "XML", "xml2",
             "lubridate", "data.table",
             "ggplot2", "anytime", "dplyr",
             "network", "quanteda", "ggmap",
             "networkDynamic", "mgsub",
             "dplyr", "ggplot2", "network",
             "stats", "ndtv", "devtools",
             "ggtext"),
           requireNamespace, quietly = TRUE)))

  pkg_info <- "Welcome to my package"
  packageStartupMessage(pkg_info)

}

【问题讨论】:

  • @NelsonGon 这是我想做的,但我使用 roxygen2 来构建包,所以我不确定我必须在哪里放置建议的更改,我从未明确使用过devtools::load_allonLoad。当使用 roxygen2 构建包时,你知道我可以在哪里编辑这些吗?
  • .onLoad 放入zzz.R。你可以在我的repo 上看到一个例子。 load_all(只需要在构建时测试更改)是无关紧要的。只需按照此处所述输入suppressPackageStartupMessages,即只需将.onLoad 复制到zzz.R
  • 我可以确认它不起作用。
  • 您是否在使用DESCRIPTION 文件的Depends 字段?通常使用Imports 字段,并且没有启动消息。
  • 想必这是本地使用的包吧?如果我是最终用户,我当然想知道有 26 个相当大的包正在加载并添加到我的搜索路径中。即使它是供本地使用的,我也会按照@StéphaneLaurent 的建议将包放在Imports 而不是Depends 中,使用命名空间限定符来引用我代码中的导入函数。

标签: r package suppress-warnings roxygen2


【解决方案1】:

在后台,包加载调用:
pkgload::load_depends 调用
require 具有quietly = FALSE 默认选项。

您只需将此选项设置为TRUE 即可避免消息:

# Welcome message
.onLoad <- function(...){
 quietly <- getOption('quietly')
 options(quietly = T)
 pkg_info <- "Welcome to my package"
 packageStartupMessage(pkg_info)
 options(quietly = quietly)
}
> devtools::load_all(".")
Loading myPackage
Welcome to my package

【讨论】:

  • 我试过了,但是当我加载包时,我仍然会在控制台上打印相同的消息。
  • 您是否收到完全相同的消息,或者其中一些消息消失了?我用 data.table 试过这个,输出很干净。
  • 我的错,我忘记保存函数了!刚刚再次尝试,我收到的消息明显减少!我仍然得到的唯一的东西是一些两个 S3 方法被覆盖的警告。看起来您的代码和 Stephane Laurent 的建议相结合就成功了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 2017-07-30
相关资源
最近更新 更多