简体   繁体   中英

Access evaluated function arguments R

How is it possible to access evaluated arguments to a function in case arguments have missing values.

Assuming the function is defined like.

foo <- function(...){
# function body
}

How to access arguments to function in its body, if some arguments are missing?

In case of no missing value, the answer is just

foo <- function(...){
  args <- list(...)
}

But this will not work if we do a call like foo(1,,3) .

And other way I was able to find

foo <- function(...){
  args <- as.list(match.call())[-1]
}

Gives a list of arguments but they are not evaluated. For example for call foo(rnorm(10), 1, 2) args will contain unevaluated arguments, that I have sometimes troubling evaluating. Is there any meaningful way to do this?

UPD I need this because I want to write a wrapper functions that record arguments to function calls and return values. For example,

matrix_w <- function(...){
  args <- list(...)
  res <- matrix(...)
  return(res)
}

In a case of most calls it will work, but for call matrix_w(rnorm(20), , 2) , it will not be able to process arguments in args <- list(...) , but matrix(rnorm(20), , 2) works correctly.

If you want them evaluated, you probably just should evaluate them yourself

matrix_w <- function(...){
  args <- as.list(match.call())[-1]
  eval.args <- lapply(args, function(x) tryCatch(eval(x), error=function(z) x))
  do.call(matrix, eval.args)
}

matrix_w(rnorm(10), , 2)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM