Как генерировать аргументы для целевого преобразования динамически в R Drake?

Я хочу создать большой план, аргументы которого зависят от ранее вычисленных целей. Это возможно вообще?

В частности, мне нужно что-то вроде:

drake_plan(
  data = get_data(),
  lots_of_sds = get_sds_from_a_complex_pipeline()
  analysis = target(
    fun(data, mean = mean_val, sd = sd_val),
    transform = cross(mean_val = c(2, 5), sd_val = !!lots_of_sds)
  )
)

Проблема в том, что попытка этого (или аналогичные варианты) не удается, потому что lots_of_sds не было определено и, как таковое, трансформация не может расширить план.

Кто-нибудь сталкивался с подобной ситуацией в прошлом? Есть идеи / обходные пути?

Спасибо! Я использую Drake 7.0.0 и R версии 3.5.3

1 ответ

Решение

Вы почти там. Все, что вам нужно сделать, это определить lots_of_sds заранее снаружи drake_plan(), которая является стандартной процедурой при использовании !!,

library(drake)

lots_of_sds <- c(1, 2)

drake_plan(
  data = get_data(),
  analysis = target(
    fun(data, mean = mean_val, sd = sd_val),
    transform = cross(mean_val = c(2, 5), sd_val = !!lots_of_sds)
  )
)
#> # A tibble: 5 x 2
#>   target       command                    
#>   <chr>        <expr>                     
#> 1 data         get_data()                 
#> 2 analysis_2_1 fun(data, mean = 2, sd = 1)
#> 3 analysis_5_1 fun(data, mean = 5, sd = 1)
#> 4 analysis_2_2 fun(data, mean = 2, sd = 2)
#> 5 analysis_5_2 fun(data, mean = 5, sd = 2)

Создано в 2019-05-16 пакетом представлением (v0.2.1)

Значение lots_of_sds должен уже существовать до запуска drake_plan() или же make(), Это ограничение drake будет трудно преодолеть: https://github.com/ropensci/drake/issues/685.

Другие вопросы по тегам