当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R try 尝试允许错误恢复的表达式


R语言 try 位于 base 包(package)。

说明

try 是一个包装器,用于运行可能失败的表达式并允许用户的代码处理error-recovery。

用法

try(expr, silent = FALSE,
    outFile = getOption("try.outFile", default = stderr()))

参数

expr

一个R尝试表达。

silent

逻辑:是否应该抑制错误消息的报告?

outFile

connection ,或命名要打印到的文件的字符串(通过 cat(*, file = outFile) );默认情况下,仅当 silent 为 false 时才使用。

细节

try 计算表达式并捕获计算期间发生的任何错误。如果发生错误,则错误消息将打印到 stderr 连接,除非 options("show.error.messages") 为 false 或调用包含 silent = TRUE 。错误消息也存储在缓冲区中,可以通过 geterrmessage 检索。 (这不是必需的,因为发生错误时返回的值包含错误消息。)

try 是使用 tryCatch 实现的;对于编程来说,像 tryCatch(expr, error = function(e) e) (或其他简单的错误处理函数)这样的东西代替 try(expr, silent = TRUE) 可能更高效、更灵活。

outFile 的默认值设置为 stdout() 可能很有用,即

  options(try.outFile = stdout()) 

而不是默认的 stderr() ,特别是当 try()Sweave 代码块内使用时,错误消息应出现在生成的文档中。

如果expr 表达式的值被评估而没有错误:否则从类"try-error" 继承的不可见对象包含错误消息,错误条件作为"condition" 属性。

警告

请勿测试

    if (class(res) == "try-error"))

就好像没有错误一样,结果可能(现在或将来)具有长度 > 1 的类。请改用if(inherits(res, "try-error"))

例子

## this example will not work correctly in example(try), but
## it does work correctly if pasted in
options(show.error.messages = FALSE)
try(log("a"))
print(.Last.value)
options(show.error.messages = TRUE)

## alternatively,
print(try(log("a"), TRUE))

## run a simulation, keep only the results that worked.
set.seed(123)
x <- stats::rnorm(50)
doit <- function(x)
{
    x <- sample(x, replace = TRUE)
    if(length(unique(x)) > 30) mean(x)
    else stop("too few unique points")
}
## alternative 1
res <- lapply(1:100, function(i) try(doit(x), TRUE))
## alternative 2
## Not run: res <- vector("list", 100)
for(i in 1:100) res[[i]] <- try(doit(x), TRUE)
## End(Not run)
unlist(res[sapply(res, function(x) !inherits(x, "try-error"))])

也可以看看

options 用于设置错误处理程序并禁止打印错误消息; geterrmessage 用于检索最后一条错误消息。底层tryCatch提供了更灵活的捕获和处理错误的方法。

tools 包中的assertCondition 相关且对于测试很有用。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Try an Expression Allowing Error Recovery。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。