我正在尝试编写一组函数来检查缺少的R包,并在必要时安装它们.在StackOverflow上有一些很好的代码:从这里开始.
我想让函数尽可能保持沉默,特别是因为R甚至以红色墨水返回成功的消息.因此,我试图将quietly = TRUE论证传递给两者library和require.
但是,这些选项似乎永远不会起作用:
# attempt to get a silent fail
require(xyz, quietly = TRUE)
Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
there is no package called ‘xyz’
Run Code Online (Sandbox Code Playgroud)
我如何能够require默默地失败,以及我没有得到关于该quietly选项的内容?
文件说:
quietly合乎逻辑的.如果为TRUE,则不会打印确认包装载的消息,并且通常,如果包装加载失败,则不会打印错误/警告.
但在我个人的经历中,"我经常"应该"几乎从不".我很高兴听到你的经历.理由:编码功能,以帮助学生.
加.同样的问题适用quiet = TRUE于install.packages().它只会杀死进度条,但不会删除随后出现的"下载的二进制包都在"消息(黑色,黑色!),即使它对中位用户没用.
加.如果这可能是任何人都感兴趣,到目前为止的代码:
## getPackage(): package loader/installer
getPackage <- function(pkg, load = TRUE, silent = FALSE, repos = "http://cran.us.r-project.org") {
if(!suppressMessages(suppressWarnings(require(pkg, character.only = TRUE, quietly = TRUE)))) {
try(install.packages(pkg, repos = repos), silent = TRUE)
}
if(load) suppressPackageStartupMessages(library(pkg, character.only = TRUE, quietly = TRUE))
if(load & !silent) message("Loaded ", pkg)
}
## Not run:
x <- c("ggplot2", "devtools") # etc.
lapply(x, getPackage, silent = TRUE)
Run Code Online (Sandbox Code Playgroud)
我正在考虑放弃在quietly上面的函数中使用的努力,因为它似乎在预期时不起作用.我应该向R用户列表询问这个问题,以便从核心devteam获得解释.根据suppressMessages(suppressWarnings(require(...)))我的经验,解决方法可能不稳定.
jub*_*uba 20
如果你想让你的require功能非常安静,你可以使用:
suppressMessages(suppressWarnings(require(xyz)))
Run Code Online (Sandbox Code Playgroud)
这使 :
......好吧,没有:)
zwo*_*wol 16
我不确定这是什么时候添加到语言中,但现在这样做的首选方法是
suppressPackageStartupMessages({
require(this)
require(that)
...
})
Run Code Online (Sandbox Code Playgroud)
这会导致"正在加载...",有关屏蔽符号和其他噪音的投诉,但仍会出现指示实际问题的消息(例如,包或依赖项不可用).
最简单的解决方案似乎是
try(library(xyz), silent=TRUE)
Run Code Online (Sandbox Code Playgroud)
require基本上是一个包装器tryCatch(library),所以这只是削减了一些无关的代码.