在tryCatch中使用purrr lambda

问题描述 投票:1回答:1

如果可能的话,我想使用purrr的lambda ~,而不是在tryCatch中写出function(e),如下所示:

tryCatch(suppressWarnings(load("foo.R")),
         error = function(e) {
           foo <- "a"
           save(foo, file = "foo.R")
         })

我实际上并不使用e作为参数,而~function(e)短10个字符。简单地交换~不起作用,所以我怀疑我要么误用~,要么tryCatch无法容纳它。

file.remove("foo.R")
#> [1] TRUE
tryCatch(suppressWarnings(load("foo.R")),
         error = ~ {
           foo <- "a"
           save(foo, file = "foo.R")
         })
#> Error in value[[3L]](cond): attempt to apply non-function

(我知道可以使用file.exists而不是tryCatch结构用于此类事情,但正如this线程中的答案所指出的那样,在尝试加载文件时可能会抛出其他错误。)

r try-catch purrr
1个回答
2
投票

一个选择是使用as_mapperpurrr

library(purrr)
file.remove("foo.R")
#[1] TRUE
tryCatch(suppressWarnings(load("foo.R")),
     error = as_mapper(~ {
       foo <- "a"
       save(foo, file = "foo.R")
     }))
list.files()
#[1] "foo.R"
© www.soinside.com 2019 - 2024. All rights reserved.