#' 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{getSize()}} #' {Return number of individual forecasts.} #' \item{\code{append(new_serie, new_params, new_index_in_data)}} #' {Acquire a new individual forecast, with its (optimized) parameters and the corresponding #' index in the dataset.} #' \item{\code{getDates()}} #' {Get dates where forecast occurs.} #' \item{\code{getSerie(index)}} #' {Get forecasted serie at specified index.} #' \item{\code{getParams(index)}} #' {Get parameters at specified index (for 'Neighbors' method).} #' \item{\code{getIndexInData(index)}} #' {Get index in data which corresponds to current forecast.}} Forecast = R6::R6Class("Forecast", private = list( .pred = list(), .dates = c() ), public = list( initialize = function(dates) { private$.dates <- dates invisible(self) }, getSize = function() length(private$.pred) , append = function(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) }, getDates = function() private$.dates , getSerie = function(index) { if (is(index,"Date")) index = match(index, private$.dates) private$.pred[[index]]$serie }, getParams = function(index) { if (is(index,"Date")) index = match(index, private$.dates) private$.pred[[index]]$params }, getIndexInData = function(index) { if (is(index,"Date")) index = match(index, private$.dates) private$.pred[[index]]$index_in_data } ) )