#' Forecast #' #' Forecast encapsulation #' #' @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} #' @field .dates vector of day indices where forcast occurs #' #' @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() ), public = list( initialize = function(dates) initializeForecast(self, private, dates) , getSize = function() getSizeForecast(private) , append = function(new_serie, new_params, new_index) appendForecast(private, new_serie, new_params, new_index) , getDates = function() getDatesForecast(private) , getSerie = function(index) getSerieForecast(private, index) , getParams = function(index) getParamsForecast(private, index) , getIndexInData = function(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 }