gpt4 book ai didi

r - 访问 R 中的所有函数参数

转载 作者:行者123 更新时间:2023-12-04 01:55:04 25 4
gpt4 key购买 nike

我有一个函数 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);

是否有可能?谢谢。

最佳答案

嗯,这样的事情当然是可能的。您应该自己确定我们在哪个帧/点中要评估 f 的参数,然后将其转发给 g。

典型的过程包括在 f 内部调用 match.call() 以实际记录调用 f 的调用表达式,然后更改调用表达式,因为它应该对您方便(例如过滤掉不必要的参数,添加新的等)然后通过 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())
}

关于r - 访问 R 中的所有函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8384382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com