访问评估的函数参数R.

时间:2014-08-06 18:14:47

标签: r function arguments closures

如果参数缺少值,如何可以访问函数的求值参数。

假设函数定义为。

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

如果缺少某些参数,如何在其正文中访问参数?

如果没有缺失值,答案就是

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

但如果我们进行foo(1,,3)之类的调用,这将无效。

我能找到其他方式

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

提供参数列表但不评估它们。例如,对于调用foo(rnorm(10), 1, 2),args将包含未评估的参数,我有时会对其进行评估。 有没有什么有意义的方法可以做到这一点?

UPD 我需要这个,因为我想编写一个包装函数来记录函数调用和返回值的参数。例如,

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

如果是大多数通话都会有效,但是对于通话matrix_w(rnorm(20), , 2),它将无法处理args <- list(...)中的参数,但matrix(rnorm(20), , 2)可以正常工作。

1 个答案:

答案 0 :(得分:1)

如果您希望对它们进行评估,您可能应该自己评估它们

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)