如果可能的话,我想使用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线程中的答案所指出的那样,在尝试加载文件时可能会抛出其他错误。)
一个选择是使用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"