[R] Capturing Function Arguments

Reed A. Cartwright r@c@rtwr|ght @end|ng |rom gm@||@com
Sat Feb 17 19:15:43 CET 2024

I'm wrapping a function in R and I want to record all the arguments
passed to it, including default values and missing values. I want to
be able to snoop on function calls in sourced scripts as part of a
unit testing framework.

I can capture the values fine, but I'm having trouble evaluating them
as if `force()` had been applied to each of them.

Here is a minimal example:

f0 <- function(x, y = 2 * z, z, a = NULL, b) NULL

f <- function(...) {
  call <- rlang::call_match(fn = f0, defaults = TRUE)
  args <- rlang::call_args(call)
  # do something here to evaluate args as if force() had been called
  # I've tried many things but haven't found a solution that handled everything

# In the below example args1 and args2 should be the same
a <- 1
args1 <- f(a, z = 1 + 100)

args2 <- list( a = 1, y = 202, z = 101, a = NULL, b = rlang::missing_arg() )

If anyone knows how to get this to work, I would appreciate the help.


Reed A. Cartwright, PhD
Associate Professor of Genomics, Evolution, and Bioinformatics
School of Life Sciences and The Biodesign Institute
Arizona State University
Address: The Biodesign Institute, PO Box 876401, Tempe, AZ 85287-6401 USA
Packages: The Biodesign Institute, 1001 S. McAllister Ave, Tempe, AZ
85287-6401 USA
Office: Biodesign B-220C, 1-480-965-9949
Website: http://cartwrig.ht/

More information about the R-help mailing list