Условная передача аргументов в функции R - PullRequest
0 голосов
/ 27 марта 2019

У меня есть существующая функция pass_thru(target,...), которая передает аргументы другим функциям (скажем, a(), b() и c()) в зависимости от ее входных данных.Например:

> target <- "a"
> arg1 <- "some input"
> arg2 <- "other input"
> pass_thru(target, arg1)
# This passes ellipses arguments to function `a()`

Я хотел бы передать arg2 моей функции, но только если target == b, потому что ни одна из других функций не может принять arg2 (то есть arg2 = NULL не работает).Кроме того, я не могу внести изменения в pass_thru().

. Желаемый эффект приведен ниже, но без необходимости повторения pass_thru().

> if (target == "b") { pass_thru(target, arg1, arg2) }
  else { pass_thru(target, arg1) }

-
.Фактический код, который я запускаю, взят из пакета caret.verbose - это аргумент, который нарушает функцию, когда method = "glm".

train(y ~ x, data,
      method = TARGET,
      trControl = ARG1,
      verbose = ARG2)

1 Ответ

0 голосов
/ 27 марта 2019

Вы можете создать функцию-оболочку, которая отправит правильное количество аргументов в pass_thru.Вот фиктивный пример для демонстрации

pass_thru = function(t, ...){
  a = function(arg1,arg2) paste(arg1,arg2)
  b = function(arg1) paste(arg1)
  get(t)(...)
}


pass_wrapper = function(target, ...){
  dots = list(...)
  if (target != 'a') dots[2] <- NULL
  do.call(pass_thru, c(target, dots))
}

pass_wrapper("a", arg1, arg2)
# "some input other input"
pass_wrapper("b", arg1, arg2)
# "some input"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...