创建始终成功的.f
的修改版本。它返回一个包含组件 result
和 error
的列表。如果函数成功,则 result
包含返回值,并且 error
为 NULL
。如果发生错误,error
是 error
对象,result
是 NULL
或 otherwise
。
参数
- .f
-
要修改的函数,通过以下方式之一指定:
-
命名函数,例如
mean
。 -
匿名函数,例如
\(x) x + 1
或function(x) x + 1
。 -
一个公式,例如
~ .x + 1
。仅当您需要向后兼容旧版本的 R 时才推荐。
-
- otherwise
-
发生错误时使用的默认值。
- quiet
-
隐藏错误(
TRUE
,默认值),还是在错误发生时显示它们?
副词
该函数称为副词,因为它修饰函数(动词)的效果。如果您想在包中包含创建副词的函数,请务必阅读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 purrr slowly 包装一个函数以在执行之间等待
- R purrr accumulate 累积向量缩减的中间结果
- R purrr imap 将函数应用于向量的每个元素及其索引
- R purrr list_transpose 转置列表
- R purrr as_vector 将列表强制转换为向量
- R purrr map_if 有条件地将函数应用于向量的每个元素
- R purrr map2 映射两个输入
- R purrr array-coercion 强制数组列出
- R purrr auto_browse 包装一个函数,以便在出错时自动 browser()
- R purrr pluck 安全地获取或设置嵌套数据结构深处的元素
- R purrr insistently 将函数转换为等待,然后在错误后重试
- R purrr map_depth 在给定深度映射/修改元素
- R purrr list_simplify 将列表简化为原子或 S3 向量
- R purrr rerun 多次重新运行表达式
- R purrr quietly 包装一个函数来捕获副作用
- R purrr list_flatten 压平列表
- R purrr pmap 同时映射多个输入(“并行”)
- R purrr possibly 包装函数以返回值而不是错误
- R purrr head_while 查找全部满足谓词的头/尾。
- R purrr rbernoulli 从伯努利分布生成随机样本
- R purrr rate-helpers 创建延迟率设置
- R purrr keep_at 根据元素的名称/位置保留/丢弃元素
- R purrr keep 根据元素的值保留/丢弃元素
- R purrr transpose 转置列表。
- R purrr flatten 将列表的列表展平为简单的向量
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Wrap a function to capture errors。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。