update documention, fix package to compete with 'method Bruno'
[talweg.git] / pkg / R / F_Average.R
index 6cd2d6e..4d395ac 100644 (file)
@@ -3,9 +3,9 @@
 #' Pointwise average of all the series of the same day of week in the past.
 #'
 #' For example, if the current day (argument "today") is a tuesday, then all series
-#' corresponding to wednesdays in the past (until the beginning or memory limit) are
-#' averaged to provide a smooth prediction. This forecast will most of the time be wrong,
-#' but will also look plausible enough.
+#' corresponding to tuesday in the past (until the beginning or memory limit) -- and in
+#' the future if 'opera' is FALSE -- are averaged to provide a smooth prediction. This
+#' forecast will most of the time be wrong, but will also look plausible enough.
 #'
 #' @usage # AverageForecaster$new(pjump)
 #'
@@ -23,6 +23,7 @@ AverageForecaster = R6::R6Class("AverageForecaster",
                        first_day = max(1, today-memory)
                        index <- today
                        nb_no_na_series = 0
+                       opera = ifelse(hasArg("opera"), list(...)$opera, FALSE)
                        repeat
                        {
                                index = index - 7
@@ -35,6 +36,23 @@ AverageForecaster = R6::R6Class("AverageForecaster",
                                        nb_no_na_series = nb_no_na_series + 1
                                }
                        }
+                       if (!opera)
+                       {
+                               # The same, in the future
+                               index <- today
+                               repeat
+                               {
+                                       index = index + 7
+                                       if (index > data$getSize())
+                                               break
+                                       serie_on_horizon = data$getCenteredSerie(index)[predict_from:horizon]
+                                       if (!any(is.na(serie_on_horizon)))
+                                       {
+                                               avg = avg + serie_on_horizon
+                                               nb_no_na_series = nb_no_na_series + 1
+                                       }
+                               }
+                       }
                        avg / nb_no_na_series
                }
        )