#' Forecast #' #' Forecast encapsulation #' #' @field pred List with #' \itemize{ #' \item serie: forecasted serie #' \item params: corresponding list of parameters (weights, neighbors...) #' \item index: corresponding index in data object #' } #' #' @docType class #' @importFrom R6 R6Class #' #' @export Forecast = R6::R6Class("Forecast", private = list( .pred = "list", .dates = "Date" ), public = list( initialize = function(dates) initialize(self, private, dates) , getSize = function() getSize(private) , append = function(new_serie, new_params, new_index) append(private, new_serie, new_params, new_index) , getDates = function() getDates(private) , getSerie = function(index) getSerie(private, index) , getParams = function(index) getParams(private, index) , getIndexInData = function(index) getIndexInData(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 initialize = function(o, private, dates) { private$.dates <<- dates private$.pred <<- list() invisible(o) } #' Number of individual forecasts" #' #' @inheritParams initialize getSize = function(private) length(private$.pred) #' Obtain a new pair (serie, params)" #' #' @inheritParams initialize 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) } #' Dates where prediction occurs #' #' inheritParams initialize getDates = function(private) private$.dates #' Serie values at specified index" #' #' @inheritParams initialize #' @param index Return value at this index getSerie = function(index) { if (is(index,"Date")) index = match(index, private$.dates) private$.pred[[index]]$serie } #' Params at specified index" #' #' @inheritParams getSerie getParams = function(index) { if (is(index,"Date")) index = match(index, private$.dates) private$.pred[[index]]$params } #' (day) Index in data where prediction took place" #' #' @inheritParams getSerie getIndexInData = function(index) { if (is(index,"Date")) index = match(index, private$.dates) private$.pred[[index]]$index_in_data }