Reputation: 75
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