我有一个函数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);
Run Code Online (Sandbox Code Playgroud)
我认为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);
Run Code Online (Sandbox Code Playgroud)
可能吗?谢谢.
Ant*_*kov 16
那么,这样的事情肯定是可能的.你应该自己想一下你想在哪个帧/点评估f的参数然后转发给g.
典型的过程包括f内的match.call()调用实际记录调用f的调用表达式,然后更改调用表达式,因为它应该对你很方便(例如过滤掉不必要的args,添加new等)然后通过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())
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4955 次 |
| 最近记录: |