-#' @title Forecast
+#' Forecast
#'
-#' @description Forecast encapsulation
+#' Forecast encapsulation
#'
-#' @field pred List with
-#' \itemize{
+#' @docType class
+#' @importFrom R6 R6Class
+#'
+#' @field .pred List with \itemize{
#' \item serie: forecasted serie
#' \item params: corresponding list of parameters (weights, neighbors...)
-#' \item index: corresponding index in data object
-#' }
+#' \item index: corresponding index in data object}
+#' @field .dates vector of day indices where forcast occurs
#'
-#' @exportClass Forecast
-#' @export Forecast
-Forecast = setRefClass(
- Class = "Forecast",
-
- fields = list(
- pred = "list"
+#' @section Methods: \describe{
+#' \item{\code{initialize(dates)}}
+#' {Initialize a Forecast object with a series of date indices.}
+#' \item{\code{predictSerie(today,memory,horizon,...)}}
+#' {Predict a new serie of \code{horizon} values at day index \code{today} using \code{memory}
+#' days in the past.} TODO: continue #######################################
+#' \item{\code{predictShape(today,memory,horizon,...)}}
+#' {Predict a new shape of \code{horizon} values at day index \code{today} using \code{memory}
+#' days in the past.}
+#' \item{\code{getParameters()}}
+#' {Return (internal) parameters.} }
+Forecast = R6::R6Class("Forecast",
+ private = list(
+ .pred = list(),
+ .dates = c()
),
-
- methods = list(
- initialize = function(...)
- {
- "Initialize empty Forecast object"
-
- callSuper(...)
- },
+ public = list(
+ initialize = function(dates)
+ initializeForecast(self, private, dates)
+ ,
getSize = function()
- {
- "Number of individual forecasts"
-
- length(pred)
- },
+ getSizeForecast(private)
+ ,
append = function(new_serie, new_params, new_index)
- {
- "Obtain a new pair (serie, params)"
-
- pred[[length(pred)+1]] <<- list("serie"=new_serie, "params"=new_params, "index"=new_index)
- },
+ appendForecast(private, new_serie, new_params, new_index)
+ ,
+ getDates = function()
+ getDatesForecast(private)
+ ,
getSerie = function(index)
- {
- "Serie values at specified index"
-
- pred[[index]]$serie
- },
+ getSerieForecast(private, index)
+ ,
getParams = function(index)
- {
- "Params at specified index"
-
- pred[[index]]$params
- },
+ getParamsForecast(private, index)
+ ,
getIndexInData = function(index)
- {
- "(day) Index in data where prediction took place"
-
- pred[[index]]$index
- }
+ getIndexInDataForecast(private, index)
)
)
+
+#' Initialize empty Forecast object
+#'
+#' @param o Object of class Forecast
+#' @param private List of private members in o
+#' @param dates vector of dates where forecast occurs
+initializeForecast = function(o, private, dates)
+{
+ private$.dates <- dates
+ invisible(o)
+}
+
+#' Number of individual forecasts"
+#'
+#' @inheritParams initializeForecast
+getSizeForecast = function(private)
+ length(private$.pred)
+
+#' Obtain a new pair (serie, params)"
+#'
+#' @inheritParams initializeForecast
+#' @param new_serie Values of a new serie
+#' @param new_params Associated (optimized) parameters
+#' @param new_index_in_data Corresponding index in data
+appendForecast = function(private, new_serie, new_params, new_index_in_data)
+{
+ private$.pred[[length(private$.pred)+1]] <-
+ list("serie"=new_serie, "params"=new_params, "index_in_data"=new_index_in_data)
+}
+
+#' Dates where prediction occurs
+#'
+#' inheritParams initializeForecast
+getDatesForecast = function(private)
+ private$.dates
+
+#' Serie values at specified index"
+#'
+#' @inheritParams initializeForecast
+#' @param index Return value at this index
+getSerieForecast = function(index)
+{
+ if (is(index,"Date"))
+ index = match(index, private$.dates)
+ private$.pred[[index]]$serie
+}
+
+#' Params at specified index"
+#'
+#' @inheritParams getSerieForecast
+getParamsForecast = function(index)
+{
+ if (is(index,"Date"))
+ index = match(index, private$.dates)
+ private$.pred[[index]]$params
+}
+
+#' (day) Index in data where prediction took place"
+#'
+#' @inheritParams getSerieForecast
+getIndexInDataForecast = function(index)
+{
+ if (is(index,"Date"))
+ index = match(index, private$.dates)
+ private$.pred[[index]]$index_in_data
+}