tryCatch未捕获RStudio中install.packages产生的错误
考虑以下用法:tryCatch未捕获RStudio中install.packages产生的错误,r,try-catch,packages,rstudio,R,Try Catch,Packages,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
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)
})
似乎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>
但这是一个丑陋的RStudio黑客。如果查看普通R中的install.packages,您会发现:
head(install.packages)#非常长:p1函数(pkgs,lib,repos=getOption(“repos”),contriburl=contrib.url(repos, 2类型),方法,可用=NULL,destdir=NULL,依赖项=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,
我建议将关闭作为非主题,因为这是一个RStudio问题。基本上,
tryCatch
正在捕获错误,但RStudio的错误处理程序仍会打印错误。因此,您获得返回值的原因是:
[[1]]
NULL
[[2]]
NULL
这意味着
tryCatch
有效。RStudio只是奇怪地打印捕获的错误。使用名称空间调用:
utils::install.packages()
它为我捕获了错误。您使用的是什么版本的R?请重新启动并包括
sessionInfo()
@RobertKrzyzanowski添加的sessionInfo
,然后再次运行新会话,仍然相同。它还忽略suppressMessages()
和suppressWarnings()
。我认为这与它不是本机R函数有关。这个问题似乎离题了,因为它是关于RStudio打印捕获的错误的。我在普通控制台中检查过,它按预期工作。没想到RStudio是罪魁祸首。谢谢。感谢您的提示,这确实是RStudio的非本机重写。嗯,是的,如果你在普通R中做同样的事情,你会得到一些不同的东西…想知道为什么需要这种黑客行为。所以我想解决办法是使用utils::install.packages
@tonytonovs,它似乎对我有效,尽管我仍然想知道这种黑客行为的原因。(在那之前,我会在我的代码中添加一条很好的负面评论,诅咒rstudio,因为……你知道:))这里有一些解释和建议
[[1]]
NULL
[[2]]
NULL
utils::install.packages()