【发布时间】:2020-04-13 04:32:57
【问题描述】:
在 R 中,可以使用 ... 创建具有可变数量参数的函数,如图所示 here。
但是,我想要一个具有可变数量的命名(正式)参数的函数。 作为一个最小的例子,类似于
f_nargs <- function(n) {
# process argument n
# ...
f(x1, ..., xn) # What should this be ?
}
我怎样才能做到这一点?
总体目标是在包中使用函数(al)。该函数(al)需要一个具有 3 个形式参数的函数作为输入。虽然我可以专门为 n=3 编写函数,但我很好奇这是否可以为一般 n 完成。
编辑:这是我的想法:
我当前的函数是f(x),其中x是一个长度为3的向量。
我想在将其传递给包中的函数之前将其转换为f(x1, x2, x3)。这个函数检查length(formals(f))==3。
目前,我将f 传递给
split_args3 <- function(f) {
force(f)
function(x1, x2, x3, ...) {
f(c(x1, x2, x3), ...)
}
}
这有效,但仅适用于特定的 n。然后我尝试使用
split_args <- function(f, d) {
force(f)
force(d)
function(...) {
dots <- list(...)
arg1 <- do.call(c, dots[1:d])
do.call(f, append(list(arg1), dots[-(1:d)]) )
}
}
但它未能通过功能检查。
【问题讨论】:
-
不确定我是否明白这个问题。
...将接受任意参数,命名或未命名;您可以收集(例如使用dots <- list(...))以检查它们是否都已命名。