drake (version 6.2.1)

deps_code: List the dependencies of a function, workflow plan command, or knitr report source file.

Description

Intended for debugging and checking your project. The dependency structure of the components of your analysis decides which targets are built and when.

Usage

deps_code(x)

Arguments

x

a language object (code), character string (code as text), or imported function to analyze for dependencies.

Value

Names of dependencies listed by type (object, input file, etc). The globals slot of the output list contains candidate globals only. Each global will be treated as an actual dependency if and only if it is either a target or an item in the envir argument to make().

Details

The globals slot of the output list contains candidate globals only. Each global will be treated as an actual dependency if and only if it is either a target or an item in the envir argument to make().

If the argument is a knitr report (for example, file_store("report.Rmd") or "\"report.Rmd\"") the the dependencies of the expected compiled output will be given. For example, deps_code(file_store("report.Rmd")) will return target names found in calls to loadd() and readd() in active code chunks. These loadd()/readd() targets are needed in order to run knit(knitr_in("report.Rmd")) to produce the output file "report.md", so technically, they are dependencies of "report.md", not "report.Rmd".

The file_store() function alerts drake utility functions to file names by enclosing them in literal double quotes. (For example, file_store("report.Rmd") is just "\"report.Rmd\"".)

drake takes special precautions so that a target/import does not depend on itself. For example, deps_code(f)`` might return "f"iff()` is a recursive function, but make() just ignores this conflict and runs as expected. In other words, make() automatically removes all self-referential loops in the dependency network.

See Also

deps_target() make() drake_plan() drake_config()

Examples

Run this code
# NOT RUN {
# Your workflow likely depends on functions in your workspace.
f <- function(x, y) {
  out <- x + y + g(x)
  saveRDS(out, "out.rds")
}
# Find the dependencies of f. These could be R objects/functions
# in your workspace or packages. Any file names or target names
# will be ignored.
deps_code(f)
# Define a workflow plan data frame that uses your function f().
my_plan <- drake_plan(
  x = 1 + some_object,
  my_target = x + readRDS(file_in("tracked_input_file.rds")),
  return_value = f(x, y, g(z + w)),
  strings_in_dots = "literals"
)
# Get the dependencies of workflow plan commands.
# Here, the dependencies could be R functions/objects from your workspace
# or packages, imported files, or other targets in the workflow plan.
deps_code(my_plan$command[1])
deps_code(my_plan$command[2])
deps_code(my_plan$command[3])
# New: you can also supply language objects.
deps_code(expression(x + 123))
# }
# NOT RUN {
test_with_dir("Quarantine side effects.", {
load_mtcars_example() # Get the code with drake_example("mtcars").
# Dependencies of the knitr-generated targets like 'report.md'
# include targets/imports referenced with `readd()` or `loadd()`.
deps_code(file_store("report.Rmd"))
})
# }

Run the code above in your browser using DataLab