访问R中的所有函数参数

时间:2011-12-05 11:08:50

标签: r

我有一个函数f(),它有一些命名参数。它调用函数g(),我想将所有f的参数传递给它。这可能吗?

使用......只涵盖额外的参数:

f=function(a,callback,b,c,d,...){
  z=a-b
  callback(z,...) 
  }

g=function(z,...){
  print(list(...))    #Only shows $e
  print(z)    #-1
  print(a,b,c,d)  #'a' not found   
}

f(1,g,2,3,d=4,e=5);

我认为formals()就是答案,但它似乎只是参数名称,而不是它们的值!

f=function(a,callback,b,c,d,...){
  z=a-b
  callback(z,formals()) 
  }

g=function(z,...){
  args=list(...)[[1]]
  print(args$a) #(no output)
  print(class(args$a))  #"name"
}

f(1,g,2,3,d=4,e=5);

有可能吗?感谢。

1 个答案:

答案 0 :(得分:15)

嗯,这样的事情肯定是可能的。你应该自己想象一下你想在哪个帧/点评估f的参数然后转发给g。

典型的过程包括f内的match.call()调用实际记录调用f的调用表达式,然后更改调用表达式,因为它应该对你很方便(例如过滤掉不必要的args,添加新的,然后通过eval()调用评估新的调用表达式。所以,这样的事情应该(几乎)起作用:

f <- function(a, callback, b, c, d, ...) {
  # Grab the "f" call expression
  fcall <- match.call(expand.dots = FALSE)

  # Construct the new call expression
  fcall[[1]] <- callback
  # Filter out / add new args
  fcall$callback <- NULL
  fcall$z <- z

  # Do the call
  eval(fcall, parent.frame())
}