我正在尝试编写一组函数来检查丢失的 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’
我怎么能require
默默地失败,我没有得到什么quietly
选择?
文档说:
quietly
一个合乎逻辑的。如果为 TRUE,则不会打印确认包裹加载的消息,并且大多数情况下,如果包裹加载失败,则不会打印错误/警告。
但在我看来,“最经常”应该是“几乎从不”以我的个人经验。我很乐意听到你的经历。理由:编码功能以帮助学生。
添加。同样的问题也适用于quiet = TRUE
in 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)
我正在考虑放弃在上面的函数中使用的努力quietly
,因为它似乎没有按预期工作。我可能应该询问 R 用户列表,以便从核心开发团队获得解释。根据suppressMessages(suppressWarnings(require(...)))
我的经验,解决方法可能不稳定。