如何参考德雷克先前的目标?

时间:2018-12-18 22:28:43

标签: drake-r-package

我想使用通配符生成一堆目标,然后使用另一组目标引用那些原始目标。我认为这个例子代表了我的想法:

plan <- drake_plan(
  sub_task = runif(1000, min = mean__, max = 50),
  full_task = sub_task * 2
)
step <- 1:4

full_plan <- evaluate_plan(
  plan,
  rules = list(
    mean__ = step
  ) 
)

所以我现在得到的是5个目标,4个子任务和一个final_task。我正在寻找的是获得8个目标。 4个子任务(很好),还有4个基于这4个好的子任务。

1 个答案:

答案 0 :(得分:2)

这个问题经常出现,我喜欢你怎么说。

有关该问题的更多信息

对于围观者,我将打印出当前(有问题的)工作流程的计划和图表。

library(drake)
plan <- drake_plan(
  sub_task = runif(1000, min = mean__, max = 50),
  full_task = sub_task * 2
)
step <- 1:4
full_plan <- evaluate_plan(
  plan,
  rules = list(
    mean__ = step
  ) 
)

full_plan
#> # A tibble: 5 x 2
#>   target     command                       
#>   <chr>      <chr>                         
#> 1 sub_task_1 runif(1000, min = 1, max = 50)
#> 2 sub_task_2 runif(1000, min = 2, max = 50)
#> 3 sub_task_3 runif(1000, min = 3, max = 50)
#> 4 sub_task_4 runif(1000, min = 4, max = 50)
#> 5 full_task  sub_task * 2

config <- drake_config(full_plan)
vis_drake_graph(config)

reprex package(v0.2.1)于2018-12-18创建

解决方案

正如您所说,我们希望full_task_*个目标依赖于它们相应的single_task_*个目标。为此,我们还需要在mean__命令中使用full_task_*通配符。通配符是基于文本替换的早期接口,因此它们本身不必是独立变量名。

library(drake)
plan <- drake_plan(
  sub_task = runif(1000, min = mean__, max = 50),
  full_task = sub_task_mean__ * 2
)
step <- 1:4
full_plan <- evaluate_plan(
  plan,
  rules = list(
    mean__ = step
  ) 
)

full_plan
#> # A tibble: 8 x 2
#>   target      command                       
#>   <chr>       <chr>                         
#> 1 sub_task_1  runif(1000, min = 1, max = 50)
#> 2 sub_task_2  runif(1000, min = 2, max = 50)
#> 3 sub_task_3  runif(1000, min = 3, max = 50)
#> 4 sub_task_4  runif(1000, min = 4, max = 50)
#> 5 full_task_1 sub_task_1 * 2                
#> 6 full_task_2 sub_task_2 * 2                
#> 7 full_task_3 sub_task_3 * 2                
#> 8 full_task_4 sub_task_4 * 2

config <- drake_config(full_plan)
vis_drake_graph(config)

reprex package(v0.2.1)于2018-12-18创建