如何在 R drake 中动态生成目标转换的参数?
How to generate arguments to a target transformation dynamically in 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
尚未定义,因此转换无法扩展计划。
有没有人遇到过类似的情况?有 ideas/workarounds 吗?
谢谢!我正在使用 drake 7.0.0 和 R 版本 3.5.3
你快到了。您需要做的就是在 drake_plan()
之外预先定义 lots_of_sds
,这是使用 !!
.
时的标准程序
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)
由 reprex package (v0.2.1)
于 2019-05-16 创建
lots_of_sds
的值需要在 运行 drake_plan()
或 make()
之前已经存在。 drake
的这个限制将很难克服:https://github.com/ropensci/drake/issues/685.
我想生成一个大型计划,其参数取决于先前计算的目标。这可能吗?
具体来说,我需要以下内容:
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
尚未定义,因此转换无法扩展计划。
有没有人遇到过类似的情况?有 ideas/workarounds 吗?
谢谢!我正在使用 drake 7.0.0 和 R 版本 3.5.3
你快到了。您需要做的就是在 drake_plan()
之外预先定义 lots_of_sds
,这是使用 !!
.
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)
由 reprex package (v0.2.1)
于 2019-05-16 创建lots_of_sds
的值需要在 运行 drake_plan()
或 make()
之前已经存在。 drake
的这个限制将很难克服:https://github.com/ropensci/drake/issues/685.