當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。