arb
arb

Reputation: 75

targets dispatch vs. skip behaviour is altered with dynamic branching

The code below illustrates it. There are three targets dfr -> dfr_x -> result. If i change dfr$a, it does not affect the downstream dfr_x and hence not result. Yet, with dynamic branching, all targets re-run. Why?

Edit: The answer is here.

targets::tar_script({
  # first run
  make_dfr <- function() tibble::tibble(x = 1:2, a = 1:2)
  list(
    targets::tar_target(dfr, make_dfr()),
    targets::tar_target(dfr_x, dplyr::select(dfr, x)),
    targets::tar_target(result, max(dfr_x$x))
  )
})
targets::tar_make()
#> > dispatched target dfr
#> o completed target dfr [0.001 seconds]
#> > dispatched target dfr_x
#> o completed target dfr_x [0.035 seconds]
#> > dispatched target result
#> o completed target result [0 seconds]
#> > ended pipeline [0.069 seconds]

targets::tar_script({
  # second run
  make_dfr <- function() tibble::tibble(x = 1:2, a = 1:2 * 5)
  list(
    targets::tar_target(dfr, make_dfr()),
    targets::tar_target(dfr_x, dplyr::select(dfr, x)),
    targets::tar_target(result, max(dfr_x$x))
  )
})
targets::tar_make()
#> > dispatched target dfr
#> o completed target dfr [0.002 seconds]
#> > dispatched target dfr_x
#> o completed target dfr_x [0.033 seconds]
#> v skipped target result
#> > ended pipeline [0.075 seconds]

targets::tar_script({
  # first run dynamic branching
  make_dfr <- function() list(tibble::tibble(x = 1:2, a = 1:2))
  list(
    targets::tar_target(dfr, make_dfr(), iteration="list"),
    targets::tar_target(dfr_x, dplyr::select(dfr, x), pattern=map(dfr), iteration="list"),
    targets::tar_target(result, max(dfr_x$x), pattern=map(dfr_x))
  )
})
targets::tar_make()
#> > dispatched target dfr
#> o completed target dfr [0.002 seconds]
#> > dispatched branch dfr_x_39b4e0c71f9c48fa
#> o completed branch dfr_x_39b4e0c71f9c48fa [0.033 seconds]
#> o completed pattern dfr_x
#> > dispatched branch result_89fb999fd0673ae5
#> o completed branch result_89fb999fd0673ae5 [0 seconds]
#> o completed pattern result
#> > ended pipeline [0.077 seconds]

targets::tar_script({
  # second run dynamic branching
  make_dfr <- function() list(tibble::tibble(x = 1:2, a = 1:2 * 5))
  list(
    targets::tar_target(dfr, make_dfr(), iteration="list"),
    targets::tar_target(dfr_x, dplyr::select(dfr, x), pattern=map(dfr), iteration="list"),
    targets::tar_target(result, max(dfr_x$x), pattern=map(dfr_x))
  )
})
targets::tar_make()
#> > dispatched target dfr
#> o completed target dfr [0.002 seconds]
#> > dispatched branch dfr_x_6e2886b62e71937a
#> o completed branch dfr_x_6e2886b62e71937a [0.033 seconds]
#> o completed pattern dfr_x
#> > dispatched branch result_d09dc4169add951f
#> o completed branch result_d09dc4169add951f [0 seconds]
#> o completed pattern result
#> > ended pipeline [0.075 seconds]

Created on 2024-11-10 with reprex v2.1.0

Upvotes: 0

Views: 52

Answers (0)

Related Questions