knitr::opts_chunk$set (
    collapse = TRUE,
    warning = TRUE,
    message = TRUE,
    width = 120,
    comment = "#>",
    fig.retina = 2,
    fig.path = "README-"
)
options (repos = c (
    ropenscireviewtools = "https://mpadge.r-universe.dev",
    CRAN = "https://cloud.r-project.org"
))
library (typetracer)

This vignette briefly illustrates some examples of tracing parameters evaluated in non-standard ways. This first examples demonstrates that parameter values are captured at the initial point of function entry.

eval_x_late_NSE <- function (x, y) {
    y <- 10 * y
    eval (substitute (x))
}
inject_tracer (eval_x_late_NSE)
eval_x_late_NSE (y + 1, 2:3)
res <- load_traces ()
res$par_name
res$uneval
res$eval

The parameter x is evaluated at the point of function entry as y + 1 which, with a value of y = 2:3, gives the expected evaluated result of x = 3:4, while the function ultimately returns the expected values of (10 * 2:3) + 1, or 21 31, because the first line of y <- 10 * y is evaluated prior to substituting the value passed for x of y + 1.

The second example specifies a default value of x = y + 1, with the actual call passing no value, and thus having "NULL" in the unevaluated version, while evaluated versions remain identical.

clear_traces () # clear all preceding traces
eval_x_late_standard <- function (x = y + 1, y, z = y ~ x) {
    y <- 10 * y
    x
}
inject_tracer (eval_x_late_standard)
eval_x_late_standard (, 2:3)
res <- load_traces ()
res$par_name
res$uneval
res$eval

The traces produced by typetracer also include a column, formal, which contains the default values specified in the definition of eval_x_late_standard():

res$formal

Those three columns of formal, uneval, and eval thus contain all definitions for all parameters passed to the function environment, in the three possible states of:

  1. Formal or default values (by definition, in an unevaluated state);
  2. The unevaluated state of any specified parameters; and
  3. The equivalent versions evaluated within the function environmental.


mpadge/typetracer documentation built on Sept. 29, 2023, 4:02 p.m.