Создайте функцию с разными аргументами в R - PullRequest
2 голосов
/ 10 марта 2019

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

modelBuild_auto_arima <- function(data, ...) {
     forecast::auto.arima(data)

   }

modelBuild_ets <- function(data, model, ...) {
   forecast::ets(data, model = model)

 }

...

Рекомендуется ли хранить ее как отдельные функции и вызывать ее отдельно или создавать универсальную функциюс "UseMethod".Я попытался создать с помощью "UseMthod"

modelBuild <- function(x, ...) {
    UseMethod("modelBuild")
   }

modelBuild.auto.arima <- function(x, ...) {
      forecast::auto.arima(x)
  }

modelBuild.ets <- function(x, ...) {
    forecast::ets(x, model = model)
    }

Идея состоит в том, чтобы вызывать эти функции как структурный блок модели в функции прогнозирования

 forecast_all <- function(data, algo_name, h, ...) {
    model <- modelBuild(data, ...)
    forecast::forecast(model, h = h)
   }

На основе значения 'algo_name' (itможет быть строкой или именем функции ets, auto.arima), modelBuild отправляет правильный метод.

1 Ответ

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

Я бы использовал UseMethod.

. Вы можете переопределить класс объекта данных, чтобы была вызвана правильная функция метода.Например:

forecast_all <- function(data, algo_name, h, ...) {

  class(data) <- c(class(data), algo_name)

  model <- modelBuild(data, ...)

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...