Как генерировать аргументы для целевого преобразования динамически в 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.