r - tryCatch 未捕获 RStudio 中 install.packages 产生的错误

标签 r try-catch package rstudio

考虑以下用法:

tryCatch(log("a"), error = function(e) NULL)
#NULL

现在,我正在尝试做基本相同的事情,但采用更复杂的方式。我有两个网络存储库,如果第一个由于某种原因不可用,我想从第二个安装软件包。这是我的做法:

pkg_location <- c("file://main_repo", "file://extra_repo")
lapply(pkg_location, function(repo)
{
  tryCatch(install.packages("my-cool-package", 
                            contriburl = repo, dependencies = TRUE),
           error = function(e) NULL)
})

我期待一个 NULL 的列表。然而,错误并没有被抑制:

Installing package into ‘...’
(as ‘lib’ is unspecified)
Warning in install.packages :
  cannot open compressed file '//extra_repo/PACKAGES', 
    probable reason 'No such file or directory'
Error in install.packages : cannot open the connection
[[1]]
NULL

[[2]]
NULL

install.packages 似乎以某种方式忽略了该机制。这怎么可能,为什么会这样,我该如何解决这个问题?

这是 sessionInfo,可能值得注意我正在运行 RStudio 0.98.977。

> sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252   
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C                           
[5] LC_TIME=English_United Kingdom.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_3.1.2

最佳答案

RStudio 不执行正常的 install.packages,而是执行自己的操作:

查看RStudio中的代码:

> install.packages
function (...) 
.rs.callAs(name, hook, original, ...)
<environment: 0x3e4b478>
> .rs.callAs
function (name, f, ...) 
{
    withCallingHandlers(tryCatch(f(...), error = function(e) {
        cat("Error in ", name, " : ", e$message, "\n", sep = "")
    }), warning = function(w) {
        cat("Warning in ", name, " :\n  ", w$message, "\n", sep = "")
        invokeRestart("muffleWarning")
    })
}
<environment: 0x3bafa38>

奇怪的代码,它自己记忆... 我在某处期待 .Primitive()

> sum
function (..., na.rm = FALSE)  .Primitive("sum")

但这是一个丑陋的 RStudio hack。如果您在普通 R 中查看 install.packages,您会得到:

head(install.packages) # it is really long :P
1 function (pkgs, lib, repos = getOption("repos"), contriburl = contrib.url(repos, 2 type), method, available = NULL, destdir = NULL, dependencies = NA,
3 type = getOption("pkgType"), configure.args = getOption("configure.args"),
4 configure.vars = getOption("configure.vars"), clean = FALSE,
5 Ncpus = getOption("Ncpus", 1L), verbose = getOption("verbose"),
6 libs_only = FALSE, INSTALL_opts, quiet = FALSE, keep_outputs = FALSE,
....

关于r - tryCatch 未捕获 RStudio 中 install.packages 产生的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26975111/

相关文章:

python - Python 中的 try-else 有什么用?

r - 在我创建的 R 数据包中找不到数据集

android - 将 Activity 从一个包切换到另一个包?

r - 从源代码安装包?

r - 正态性测试在 R 中重复 1000 次 : Shapiro Wilk, Jarque Bera,Lilliefors

r - 为 Sweave 代码块设置默认参数

r - 如何循环数据帧中的变量列表,并为每个变量应用过滤器并获取加权频率表?

r - 嵌套替换运算符如何工作?

c++ - 为什么 `catch` 在这里 catch ?

sql-server - 记录 SQL 错误