В R можно создать функцию с переменным числом аргументов, используя ...
, как показано здесь .
Однако я хотел бы иметь функцию с переменной количество именованных (формальных) аргументов. В качестве минимального примера, что-то вроде
f_nargs <- function(n) {
# process argument n
# ...
f(x1, ..., xn) # What should this be ?
}
Как мне этого достичь?
Общая цель - использовать функцию (al) в пакете. Эта функция (al) требует в качестве входных данных функцию с 3 формальными аргументами. Хотя я мог бы написать функцию специально для n = 3, мне любопытно, можно ли это сделать для общего n.
Edit : Вот что я имею в виду:
Моя текущая функция - 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), ...)
}
}
Это работает, но только для определенного c 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)]) )
}
}
, но он не прошел проверку в функционале.