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


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。