Simplify plots: version OK with R6 classes
[talweg.git] / pkg / R / Forecast.R
index 274f50e..bcafd3a 100644 (file)
@@ -1,59 +1,73 @@
-#' @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
 #'
-#' @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{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 = integer(0) #store dates as integers (from 1970-01-01)
        ),
-
-       methods = list(
-               initialize = function(...)
+       public = list(
+               initialize = function(dates)
                {
-                       "Initialize empty Forecast object"
-
-                       callSuper(...)
+                       private$.dates <- dates
+                       invisible(self)
                },
                getSize = function()
+                       length(private$.pred)
+               ,
+               append = function(new_serie, new_params, new_index_in_data)
                {
-                       "Number of individual forecasts"
-
-                       length(pred)
-               },
-               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)
+                       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)
                {
-                       "Serie values at specified index"
-
-                       pred[[index]]$serie
+                       if (is(index,"Date"))
+                               index = match(index, private$.dates)
+                       private$.pred[[index]]$serie
                },
                getParams = function(index)
                {
-                       "Params at specified index"
-
-                       pred[[index]]$params
+                       if (is(index,"Date"))
+                               index = match(index, private$.dates)
+                       private$.pred[[index]]$params
                },
                getIndexInData = function(index)
                {
-                       "(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
                }
        )
 )