intermediate: R6, too slow
[talweg.git] / pkg / R / computeForecast.R
index 1a7d8ba..0585e1b 100644 (file)
 #' @param horizon Number of time steps to predict
 #' @param ... Additional parameters for the forecasting models
 #'
-#' @return An object of class Forecast
+#' @return A list with the following items
+#' \itemize{
+#'   \item serie: forecasted serie
+#'   \item params: corresponding list of parameters (weights, neighbors...)
+#'   \item index: corresponding index in data object
+#' }
 #'
 #' @examples
 #' ts_data = system.file("extdata","pm10_mesures_H_loc.csv",package="talweg")
@@ -38,7 +43,7 @@
 #'   #do_something_with_pred
 #' }}
 #' @export
-computeForecast = function(data, indices, forecaster, pjump=NULL,
+computeForecast = function(data, indices, forecaster, pjump,
        memory=Inf, horizon=data$getStdHorizon(), ...)
 {
        # (basic) Arguments sanity checks
@@ -52,21 +57,17 @@ computeForecast = function(data, indices, forecaster, pjump=NULL,
        if (!is.character(forecaster))
                stop("forecaster (name) should be of class character") #pjump could be NULL
 
-       pred = list()
-       forecaster = new(paste(forecaster,"Forecaster",sep=""), data=data,
-               pjump =
-                       if (is.null(pjump))
-                               function() {}
-                       else
-                               getFromNamespace(paste("get",pjump,"JumpPredict",sep=""), "talweg"))
+       pred = Forecast$new()
+       forecaster_class_name = getFromNamespace(paste(forecaster,"Forecaster",sep=""), "talweg")
+       forecaster = forecaster_class_name$new(data=data,
+               pjump = getFromNamespace(paste("get",pjump,"JumpPredict",sep=""), "talweg"))
        for (today in indices)
        {
-               #pred$append(...) is slow; TODO: use R6 class
-               pred[[length(pred)+1]] = list(
-                       "serie" = forecaster$predict(today, memory, horizon, ...),
-                       "params" = forecaster$getParameters(),
-                       "index" = today
+               pred$append(
+                       new_serie = forecaster$predictSerie(today, memory, horizon, ...),
+                       new_params = forecaster$getParameters(),
+                       new_index = today
                )
        }
-       new("Forecast",pred=pred)
+       pred
 }