在R中使用不同的参数创建一个函数

时间:2019-03-10 19:39:40

标签: r method-dispatch

我正在创建一个功能类似的函数,但是它将调用不同的预测算法。

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'的值(可以是字符串或函数名etsauto.arima),'modelBuild'调度正确的方法。

1 个答案:

答案 0 :(得分:0)

我会使用UseMethod

您可以重新定义数据对象的类,以便调用正确的方法函数。例如:

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

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

  model <- modelBuild(data, ...)

}