在tryCatch中使用purrr lambda

时间:2019-04-25 03:13:43

标签: r try-catch purrr

如果可能的话,我想使用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线程中的答案指出的那样,还有其他错误尝试加载文件时可能会抛出该错误。)

1 个答案:

答案 0 :(得分:2)

一种选择是使用as_mapper中的purrr

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"