首页 > 解决方案 > 如何在 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尚未定义,因此转换无法扩展计划。

过去有没有人遇到过类似的情况?有什么想法/解决方法吗?

谢谢!我正在使用德雷克 7.0.0 和 R 版本 3.5.3

标签: rdrake-r-package

解决方案


你快到了。您只需在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)

reprex 包(v0.2.1)于 2019 年 5 月 16 日创建

在您运行或lots_of_sds之前需要已经存在的值。这种限制将很难克服:https ://github.com/ropensci/drake/issues/685 。drake_plan()make()drake


推荐阅读