Как я могу заменить неудачную цель отсутствующим значением?

Я примеряю кучу моделей, используя план Дрейка. Некоторые из них выходят из строя из-за проблем с инициализацией. Я запускаю `make (plan, keep_going = T), чтобы в любом случае завершить план, но что мне действительно хотелось бы, так это иметь возможность пропустить неудачные цели и рассматривать их как пропущенные значения в остальной части плана.

Есть ли способ заменить неудачные цели, скажем, постоянным символом NA?


person lordbitin    schedule 14.11.2019    source источник


Ответы (1)


Редактировать

Вот лучший пример, чем тот, который я изначально привел. Все, что вам нужно, это заключить ваши модели в специальную функцию, которая превращает сбои в NAs.

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"

Создано 14 ноября 2019 г. пакетом REPEX (v0.3.0)

Оригинальный ответ

Это возможно, но для этого требуется специальный код. Ниже нам нужно проверить, что x равно NULL или отсутствует.

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

Создано 14 ноября 2019 г. пакетом REPEX (v0.3.0)

person landau    schedule 14.11.2019