How to refer to previous targets in drake?

你离开我真会死。 提交于 2019-12-23 21:56:39

问题


I would like to use the wildcard to generate a bunch of targets, and then have another set of targets that refers to those original targets. I think this example represents my idea:

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
  ) 
)

So what I get now is 5 targets, 4 sub_tasks and a single final_task. What I'm looking for is to get 8 targets. The 4 sub_tasks (that are good), and 4 more that are based on those 4 good sub_tasks.


回答1:


This question comes up regularly, and I like how you phrased it.

More about the problem

For onlookers, I will print out the plan and the graph of the current (problematic) workflow.

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)

Created on 2018-12-18 by the reprex package (v0.2.1)

Solution

As you say, we want full_task_* targets that depend on their corresponding single_task_* targets. to accomplish this, we need to use the mean__ wildcard in the full_task_* commands as well. Wildcards are an early-days interface based on text replacement, so they do not need to be independent variable names in their own right.

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)

Created on 2018-12-18 by the reprex package (v0.2.1)



来源:https://stackoverflow.com/questions/53842037/how-to-refer-to-previous-targets-in-drake

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!