Code in reproducible projects is often executed much more often than in non-reproducible projects. After each change, the entire analysis is typically executed to check if its results still reproduce. While such rigorous testing is integral to reproducibility see ‘Using Endpoints to Check Reproducibility’, executing unchanged code can be redundant. Moreover, if the analyses take a long time, this can take the steam out of your sails if you are in the flow, working on a project. Computing also has an environmental footprint, and it is worth considering the trade-off between re-running code sufficiently frequently to ensure its reproducibility, but not needlessly beyond that (Gupta et al. 2021).
The targets
package addresses this challenge. It facilitates defining and
executing an analysis pipeline, and tracks dependencies between blocks
of code to ensure that code is only re-run if it has changed, or if its
input has changed. Since version 0.1.15
, worcs
facilitates the use of targets
in worcs
projects. The targets
package is perfectly complementary to
worcs
, and this Vignette describes the two canonical ways
of combining the two. Since targets
requires a specific way
of working though, please make sure to read the targets
manual before jumping in.
Defining a Pipeline
The canonical way of using targets
in worcs
is to select the “Use Targets” checkbox in the “Create a Project” dialog
window. Subsequently, you would define the analysis pipeline in the
_targets.R
script file. Running
worcs::reproduce()
, or targets::tar_make()
,
will execute the steps in this script. The script often makes use of
analysis functions defined in the R/
directory. Since the
worcs
workflow recommends using dynamic document
generation, the pipeline in the _targets.R
script will
often end with rendering an Rmarkdown
or
Quarto
document. When adding targets
to a
worcs
project, this line is automatically added to the
_targets.R
script. Results from the analysis pipeline can
be loaded into the environment in the Rmarkdown
document
using the targets::tar_load(result_name)
or
targets::tar_load_everything()
functions.
Using targets
Markdown
Alternatively, is is possible to run targets
entirely
from within an Rmarkdown
file. To this end, either select
the “target_markdown” output format when creating a new
worcs
project, or select any other output format and
manually incorporate the targets
pipeline, following the manual. A
word of warning however: combining the interactive execution of code
chunks while writing an Rmarkdown file with programmatic execution of a
pipeline using tar_make()
is likely to be more prone to
bugs than only programmatically executing code.