#' Average Forecaster #' #' 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. #' #' @docType class #' @format R6 class, inherits Forecaster #' @aliases F_Average #' AverageForecaster = R6::R6Class("AverageForecaster", inherit = Forecaster, public = list( predictShape = function(data, today, memory, horizon, ...) { avg = rep(0., horizon) first_day = max(1, today-memory) index = today-7 + 1 nb_no_na_series = 0 repeat { { serie_on_horizon = data$getCenteredSerie(index)[1:horizon] index = index - 7 }; if (!any(is.na(serie_on_horizon))) { avg = avg + serie_on_horizon nb_no_na_series = nb_no_na_series + 1 }; if (index < first_day) break } avg / nb_no_na_series } ) )