tar_bookdown | R Documentation |
{targets}
and {tarchetypes}
make it straightforward to include individual
"dependency-aware R Markdown reports inside the individual targets of a pipeline"
But a {bookdown}
-based approach can be tricky. This function creates
targets to let you concisely (e.g. tar_bookdown("report")
) include a
bookdown
report in your pipeline, letting targets do its magic handling
dependencies.
tar_bookdown(
input_dir = "report",
input_files = ".",
output_dir = NULL,
output_format = NULL,
preview = FALSE
)
input_dir |
the main directory of the book |
input_files |
character vector with input files, in case you do not want to render them all (the default) |
output_dir |
The output directory. If |
output_format |
as in bookdown::render_book |
preview |
Whether to render and preview the input files specified by the
|
So, this function
receives input_dir
, typically a subfolder in your project that includes
all .Rmd files and {bookdown}
config files
creates one target per .Rmd file in input_dir
, making sure to include its
dependencies (e.g. tar_read, tar_load calls within .Rmd files, detected via
tarchetypes::tar_knitr_deps
)
includes also a single target for the {bookdown}
report, that depends on
all the individual targets corresponding to .Rmd files
returns all the targets above as a list to be included in your pipeline (please note all targets are format = "file")
Note that when running your pipeline, the bookdown target renders the book
using flowme::bookme
which is simply a wrapper around
bookdown::render_book
to deal with {bookdown}
's restrictions and be able
to render in subdirectories. This collides with the stricter (compared to
.drake) policy of {targets}
to find the data store (_targets/) at the
project root.
EDIT: now it seems {targets}
is more flexible and you can
configure the location using tar_config_set()
. Yet, the discussion below
still applies because we need to deal with temporarily changing working
directory to make bookdown work).
flowme::bookme
changes working directory to input_dir
to render the book.
Thus, when you call tar_read
in an .Rmd, {targets}
will look for the data
store in input_dir
and not in your project root where it probably lies,
leading your pipeline to fail. To circumvent this issue, there are a few
alternatives you can use when retrieving targets in your .Rmd.
change the store directly to a hard-coded value, which is probably the less verbose alternative, but it is not robust or portable (e.g. if you nest the bookdown folder into other directories)
tar_read(data, store = "..")
also change the store, but using here
to help you find the data store
tar_read(data, store = here::here(targets::tar_config_get("store")))
change the working directory again, temporarily
xfun::in_dir(here::here(), tar_read(data))
# or withr::with_dir
TODO: there might be a better way to do it. Try and find it. Meanwhile, this works.
a list of targets, including one target for each .Rmd file in input_dir and one target for the bookdown output, that depends on all .Rmd files
## Not run:
tar_bookdown("report")
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.