Skip to contents

Wrap the command of each target in an arbitrary R expression. tar_hook_outer() expects unevaluated expressions for the hook and names arguments, whereas tar_hook_outer_raw() expects evaluated expression objects.

Usage

tar_hook_outer(
  targets,
  hook,
  names = NULL,
  set_deps = TRUE,
  envir = parent.frame()
)

tar_hook_outer_raw(
  targets,
  hook,
  names = NULL,
  set_deps = TRUE,
  envir = parent.frame()
)

Arguments

targets

A list of target objects. The input target list can be arbitrarily nested, but it must consist entirely of target objects. In addition, the return value is a simple list where each element is a target object. All hook functions remove the nested structure of the input target list.

hook

R code to wrap each target's command. The hook must contain the special placeholder symbol .x so tar_hook_outer() knows where to insert the original command of the target.

tar_hook_outer() expects unevaluated expressions for the hook and names arguments, whereas tar_hook_outer_raw() expects evaluated expression objects.

names

Name of targets in the target list to apply the hook. Supplied using tidyselect helpers like starts_with(), as in names = starts_with("your_prefix_"). Set to NULL to include all targets supplied to the targets argument. Targets not included in names still remain in the target list, but they are not modified because the hook does not apply to them.

The regular hook functions expects unevaluated expressions for the hook and names arguments, whereas the "_raw" versions expect evaluated expression objects.

set_deps

Logical of length 1, whether to refresh the dependencies of each modified target by scanning the newly generated target commands for dependencies. If FALSE, then the target will keep the original set of dependencies it had before the hook. Set to NULL to include all targets supplied to the targets argument. TRUE is recommended for nearly all situations. Only use FALSE if you have a specialized use case and you know what you are doing.

envir

Optional environment to construct the quosure for the names argument to select names.

Value

A flattened list of target objects with the hooks applied. Even if the input target list had a nested structure, the return value is a simple list where each element is a target object. All hook functions remove the nested structure of the input target list.

Details

The expression you supply to hook must contain the special placeholder symbol .x so tar_hook_outer() knows where to insert the original command of the target.

Target objects

Most tarchetypes functions are target factories, which means they return target objects or lists of target objects. Target objects represent skippable steps of the analysis pipeline as described at https://books.ropensci.org/targets/. Please read the walkthrough at https://books.ropensci.org/targets/walkthrough.html to understand the role of target objects in analysis pipelines.

For developers, https://wlandau.github.io/targetopia/contributing.html#target-factories explains target factories (functions like this one which generate targets) and the design specification at https://books.ropensci.org/targets-design/ details the structure and composition of target objects.

See also

Examples

if (identical(Sys.getenv("TAR_LONG_EXAMPLES"), "true")) {
targets::tar_dir({ # tar_dir() runs code from a temporary directory.
targets::tar_script({
  targets <- list(
    # Nested target lists work with hooks.
    list(
      targets::tar_target(x1, task1()),
      targets::tar_target(x2, task2(x1))
    ),
    targets::tar_target(x3, task3(x2)),
    targets::tar_target(y1, task4(x3))
  )
  tarchetypes::tar_hook_outer(
    targets = targets,
    hook = postprocess(.x, arg = "value"),
    names = starts_with("x")
  )
})
targets::tar_manifest(fields = command)
# Using tar_hook_outer_raw():
targets::tar_script({
  targets <- list(
    # Nested target lists work with hooks.
    list(
      targets::tar_target(x1, task1()),
      targets::tar_target(x2, task2(x1))
    ),
    targets::tar_target(x3, task3(x2)),
    targets::tar_target(y1, task4(x3))
  )
  tarchetypes::tar_hook_outer_raw(
    targets = targets,
    hook = quote(postprocess(.x, arg = "value")),
    names = quote(starts_with("x"))
  )
})
})
}