7
Как написать основную функцию, достаточно гибкую, чтобы передавать дополнительные аргументы вместе с несколькими функциями? Простые попытки провалились:Передача по многоточием аргументов двум различным функциям?
> mainF <- function(f1,f2,...) {
+ f2(X=f1(...), ...)
+ }
> mainF(function(x) x, function(X, y) X*y, x=5, y=3)
Error in f2(X = f1(...), ...) : unused argument (x = 5)
Я могу видеть, как это может быть возможно путем изучения формалей и соответствующими аргументы вызова в многоточии к формалям каждой функции. Но есть ли лучший способ?
вы можете передать список одному из подфункций, то есть 'mainF < - function (f1, f2, ..., args.f2 = list()) '. – baptiste
Помимо упоминания идиомы @baptiste (которая часто используется в источниках R), вы находитесь на территории обработки аргументов. Вы можете захватить '...', получить имена аргументов 'f1' и' f2' через 'formals()', а затем обработать захваченный список '...' для извлечения аргументов для каждой функции. Что происходит, когда 'f1' и' f2' имеют одинаковые именованные аргументы? Вот почему идея баптиста очень проста; вам просто нужно 'do.call (f2, args.f2)' для вызова 'f2' с правильным набором аргументов, указанным пользователем. –
Это отличная идиома. Я, наверное, видел это миллион раз в базе R, но мне почему-то не приходило в голову так поступать по этой причине. Сообщение @baptiste как ответ? –