name instead of year; ipynb generator debugged, with logging
[talweg.git] / pkg / R / F_Persistence.R
diff --git a/pkg/R/F_Persistence.R b/pkg/R/F_Persistence.R
new file mode 100644 (file)
index 0000000..220e04c
--- /dev/null
@@ -0,0 +1,31 @@
+#' @include Forecaster.R
+#'
+#' Persistence Forecaster
+#'
+#' Return the last centered (similar) day curve.
+#' Inherits \code{\link{Forecaster}}
+PersistenceForecaster = R6::R6Class("PersistenceForecaster",
+       inherit = Forecaster,
+
+       public = list(
+               predictShape = function(data, today, memory, horizon, ...)
+               {
+                       # Return centered last (similar) day curve, avoiding NAs until memory is run
+                       first_day = max(1, today-memory)
+                       same_day = ifelse(hasArg("same_day"), list(...)$same_day, TRUE)
+                       # If 'same_day', get the last known future of similar day: -7 + 1 == -6
+                       index = today - ifelse(same_day,6,0)
+                       repeat
+                       {
+                               {
+                                       last_serie = data$getCenteredSerie(index)[1:horizon]
+                                       index = index - ifelse(same_day,7,1)
+                               };
+                               if (!any(is.na(last_serie)))
+                                       return (last_serie);
+                               if (index < first_day)
+                                       return (NA)
+                       }
+               }
+       )
+)