【问题标题】:use purrr lambda in tryCatch在 tryCatch 中使用 purrr lambda
【发布时间】:2019-04-25 03:13:42
【问题描述】:

如果可能,我想使用 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】:

    一个选项是使用来自purrras_mapper

    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"
    

    【讨论】:

    • 我猜这里没有包装器就没有办法使用~?这最终只要写出function(e)
    • @lost ~ 经过优化,可在 tidyverse 函数中使用。如果你在外面使用,那么你需要一些包装器
    猜你喜欢
    • 1970-01-01
    • 2014-09-08
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2017-06-10
    • 2016-06-17
    • 1970-01-01
    相关资源
    最近更新 更多