Я хотел бы написать функцию-оболочку для двух функций, которые принимают необязательные аргументы.Как передать альтернативные аргументы через функцию обертки?
Вот пример функции fun
обернуть funA
и funB
funA <- function(x = 1, y = 1) return(x+y)
funB <- function(z = c(1, 1) return(sum(z))
fun <- function(x, y, z)
Я хотел бы fun
вернуть x+y
если x
и y
предусмотрены, и sum(z)
если вектор z
предоставляется.
Я попытался увидеть, как функция lm
принимает такие необязательные аргументы, но неясно, как именно используется, например, match.call
.
После нахождения связанных вопросов (например, How to use R's ellipsis feature when writing your own function? и using substitute to get argument name with)), я придумал приемлемое решение.
Мое решение только в том, чтобы использовать
fun <- function(...){
inputs <- list(...)
if (all(c("x", "y") %in% inputs){
ans <- funA(x, y)
} else if ("z" %in% inputs){
ans <- funB(z)
}
Есть ли лучший способ?
Примечание: Возможно, этот вопрос может быть закрыт в двух экземплярах, но, надеюсь, он может служить цели в руководстве других пользователей хорошее решение: было бы полезно расширили свой поиск по-разному относятся ellipsis
, substitute
, в дополнение к match.call
.
@agstudy Я нашел часть полезного решения, но хотел бы знать более надежный подход. –