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

Итак, теперь я получаю 5 целей, 4 подзадачи и одну финальную задачу. Я ищу 8 целей. 4 подзадачи (которые хороши) и еще 4, основанные на этих 4 хороших подзадачах.

1 ответ

Решение

Этот вопрос возникает регулярно, и мне нравится, как вы его сформулировали.

Подробнее о проблеме

Для зрителей я распечатаю план и график текущего (проблемного) рабочего процесса.

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)

Создано 2018-12-18 пакетом представлением (v0.2.1)

Решение

Как вы говорите, мы хотим 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)

Создано 2018-12-18 пакетом представлением (v0.2.1)

Другие вопросы по тегам