我想編寫一組函數來檢查丟失的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