我想编写一组函数来检查丢失的R包,并在必要时安装它们。在StackOverflow中有一些很好的代码可以做到这一点:start here。什么时候'quietly = TRUE'实际上在require()函数中工作?
我想使功能尽可能地保持沉默,特别是因为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,则不会打印确认打包的消息,并且如果打包加载失败,通常不会打印错误/警告。
但在我个人的经验中,在我看来“最经常”应该是“几乎从不”。我会高兴地听到你的经验。理由:编码功能帮助学生。
Add。同样的问题适用于install.packages()
中的quiet = TRUE
。它只会杀死进度条,但不会杀死下载的“已下载的二进制包”消息(以黑色打印,即!),即使它对中位数用户没有用处。
Add。在这种情况下,可能会感兴趣的人,至今代码:
## 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(...)))
可能不稳定。
对于“最经常”的+1应该是“几乎从不”! – agstudy 2013-02-12 14:33:51
您可能想要阅读'require'和'library'的源代码,以确切了解'quietly'的作用。不幸的是,这些功能是混乱的意大利面代码。另请阅读'install.packages'的源代码来了解复杂程度(将文件解压缩到一个目录中),您可以创建一个简单的过程。 – hadley 2013-02-13 13:01:32
我已经阅读了'require'的源代码:这是很多嵌套的条件。 'quietly'参数杀死额外的错误信息,但不会抑制'Loading ...'消息。学生发现它很麻烦,特别是在红墨水中。 R的特质之一。我最喜欢的是'install.packages'最后传递的信息,可能是'cat':“下载的包现在处于(临时和难以理解的文件夹路径)”。 – 2013-02-14 05:58:15