如何用丢失的值替换失败的目标?

时间:2019-11-14 11:27:09

标签: drake-r-package

我正在使用德雷克计划拟合一堆模型。其中一些由于初始化问题而失败。我正在运行make(plan,keep_going = T)来完成计划,但是我真正想要的是能够跳过失败的目标并将其视为计划其余部分中的缺失值。

总有没有用一个NA符号代替失败的目标?

1 个答案:

答案 0 :(得分:1)

编辑

这里是一个比我最初提供的示例更好的示例。您需要做的就是将模型包装到一个自定义函数中,该函数会将故障转变为NA s。

library(drake)

fail_na <- function(code) {
  tryCatch(code, error = error_na)
}

error_na <- function(e) {
  NA
}

plan <- drake_plan(
  failure = fail_na(stop()),
  success = fail_na("success")
)

make(plan, keep_going = TRUE)
#> In drake, consider r_make() instead of make(). r_make() runs make() in a fresh R session for enhanced robustness and reproducibility.
#> target success
#> target failure

readd(failure)
#> [1] NA

readd(success)
#> [1] "success"

reprex package(v0.3.0)于2019-11-14创建

原始答案

可能,但是需要一些自定义代码。在下面,我们需要检查xNULL还是缺失。

library(drake)

`%||%` <- function(x, y) {
  if (is.null(x)) {
    y
  } else {
    x
  }
}

na_fallback <- function(x) {
  out <- tryCatch(
    x %||% NA,
    error = function(e) {
      NA
    }
  )
  out
}

plan <- drake_plan(
  x = stop(),
  y = na_fallback(x)
)

make(plan, keep_going = TRUE)
#> In drake, consider r_make() instead of make(). r_make() runs make() in a fresh R session for enhanced robustness and reproducibility.
#> target x
#> fail x
#> target y

readd(y)
#> [1] NA

reprex package(v0.3.0)于2019-11-14创建