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


R purrr safely 包裝一個函數來捕獲錯誤


創建始終成功的.f 的修改版本。它返回一個包含組件 resulterror 的列表。如果函數成功,則 result 包含返回值,並且 errorNULL 。如果發生錯誤,errorerror 對象,resultNULLotherwise

用法

safely(.f, otherwise = NULL, quiet = TRUE)

參數

.f

要修改的函數,通過以下方式之一指定:

  • 命名函數,例如mean

  • 匿名函數,例如\(x) x + 1function(x) x + 1

  • 一個公式,例如~ .x + 1 。僅當您需要向後兼容舊版本的 R 時才推薦。

otherwise

發生錯誤時使用的默認值。

quiet

隱藏錯誤(TRUE,默認值),還是在錯誤發生時顯示它們?

如上所述,該函數采用與 .f 相同的參數,但返回不同的值。

副詞

該函數稱為副詞,因為它修飾函數(動詞)的效果。如果您想在包中包含創建副詞的函數,請務必閱讀faq-adverbs-export

也可以看看

其他副詞:auto_browse() , compose() , insistently() , negate() , partial() , possibly() , quietly() , slowly()

例子

safe_log <- safely(log)
safe_log(10)
#> $result
#> [1] 2.302585
#> 
#> $error
#> NULL
#> 
safe_log("a")
#> $result
#> NULL
#> 
#> $error
#> <simpleError in .Primitive("log")(x, base): non-numeric argument to mathematical function>
#> 

list("a", 10, 100) |>
  map(safe_log) |>
  transpose()
#> $result
#> $result[[1]]
#> NULL
#> 
#> $result[[2]]
#> [1] 2.302585
#> 
#> $result[[3]]
#> [1] 4.60517
#> 
#> 
#> $error
#> $error[[1]]
#> <simpleError in .Primitive("log")(x, base): non-numeric argument to mathematical function>
#> 
#> $error[[2]]
#> NULL
#> 
#> $error[[3]]
#> NULL
#> 
#> 

# This is a bit easier to work with if you supply a default value
# of the same type and use the simplify argument to transpose():
safe_log <- safely(log, otherwise = NA_real_)
list("a", 10, 100) |>
  map(safe_log) |>
  transpose() |>
  simplify_all()
#> $result
#> [1]       NA 2.302585 4.605170
#> 
#> $error
#> $error[[1]]
#> <simpleError in .Primitive("log")(x, base): non-numeric argument to mathematical function>
#> 
#> $error[[2]]
#> NULL
#> 
#> $error[[3]]
#> NULL
#> 
#> 
源代碼:R/adverb-safely.R

相關用法


注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Wrap a function to capture errors。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。