-#' @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_in_data: 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.}
#' }
#'
-#' @exportClass Forecast
-#' @export Forecast
-Forecast = setRefClass(
- Class = "Forecast",
-
- fields = list(
- pred = "list"
+Forecast = R6::R6Class("Forecast",
+ private = list(
+ .pred = list(),
+ .dates = integer(0) #store dates as integers (from 1970-01-01)
),
-
- methods = list(
- initialize = function(...)
- {
- "Initialize empty Forecast object"
-
- callSuper(...)
- },
- append = function(new_serie, new_params, new_index)
+ public = list(
+ initialize = function(dates)
{
- "Obtain a new pair (serie, params)"
-
- pred[[length(pred)+1]] <<- list("serie"=new_serie, "params"=new_params, "index"=new_index)
+ private$.dates <- dates
+ invisible(self)
},
getSize = function()
+ length(private$.pred)
+ ,
+ append = function(new_serie, new_params, new_index_in_data)
{
- length(pred)
+ private$.pred[[length(private$.pred)+1]] <-
+ list("serie"=new_serie, "params"=new_params, "index_in_data"=new_index_in_data)
},
+ getDates = function()
+ as.Date( private$.dates, origin="1970-01-01" )
+ ,
getSerie = function(index)
{
- "Get serie values at specified index"
-
- pred[[index]]$serie
+ if (is(index,"Date"))
+ index = match(index, private$.dates)
+ private$.pred[[index]]$serie
},
getParams = function(index)
{
- "Get params at specified index"
-
- pred[[index]]$params
+ if (is(index,"Date"))
+ index = match(index, private$.dates)
+ private$.pred[[index]]$params
},
getIndexInData = function(index)
{
- "Get (day) index in data where prediction took place"
-
- pred[[index]]$index
+ if (is(index,"Date"))
+ index = match(index, private$.dates)
+ private$.pred[[index]]$index_in_data
}
)
)