adapt Bruno method into package, add 'operational' mode
[talweg.git] / pkg / R / computeForecast.R
index e967cc7..ef46dd3 100644 (file)
@@ -56,6 +56,8 @@ computeForecast = function(data, indices, forecaster, pjump, predict_from,
        predict_from = as.integer(predict_from)[1]
        if (! predict_from %in% 1:length(data$getSerie(1)))
                stop("predict_from in [1,24] (hours)")
+       if (hasArg("opera") && !list(...)$opera && memory < Inf)
+               memory <- Inf #finite memory in training mode makes no sense
        horizon = as.integer(horizon)[1]
        if (horizon<=predict_from || horizon>length(data$getSerie(1)))
                stop("Horizon in [predict_from+1,24] (hours)")
@@ -71,27 +73,20 @@ computeForecast = function(data, indices, forecaster, pjump, predict_from,
        forecaster = forecaster_class_name$new( #.pjump =
                getFromNamespace(paste("get",pjump,"JumpPredict",sep=""), "talweg"))
 
-       if (ncores > 1 && requireNamespace("parallel",quietly=TRUE))
+       computeOneForecast <- function(i)
        {
-               p <- parallel::mclapply(seq_along(integer_indices), function(i) {
-                       list(
-                               "forecast" = forecaster$predictSerie(
-                                       data, integer_indices[i], memory, predict_from, horizon, ...),
-                               "params"= forecaster$getParameters(),
-                               "index" = integer_indices[i] )
-                       }, mc.cores=ncores)
-       }
-       else
-       {
-               p <- lapply(seq_along(integer_indices), function(i) {
-                       list(
-                               "forecast" = forecaster$predictSerie(
-                                       data, integer_indices[i], memory, predict_from, horizon, ...),
-                               "params"= forecaster$getParameters(),
-                               "index" = integer_indices[i] )
-                       })
+               list(
+                       "forecast" = forecaster$predictSerie(data,i,memory,predict_from,horizon,...),
+                       "params" = forecaster$getParameters(),
+                       "index" = i )
        }
 
+       p <-
+               if (ncores > 1 && requireNamespace("parallel",quietly=TRUE))
+                       parallel::mclapply(integer_indices, computeOneForecast, mc.cores=ncores)
+               else
+                       lapply(integer_indices, computeOneForecast)
+
        # TODO: find a way to fill pred in //...
        for (i in seq_along(integer_indices))
        {