X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=pkg%2FR%2FForecast.R;h=bb665bdf8bfda8f205aab91a71ac60e94fcc2baf;hb=689aa1d3c58e8b1e9fdfa9b895ca38c7228f56cc;hp=57817e7ba75fb6955cafdb6bfab3e0a33ed403e5;hpb=469529710f56c790ae932b45d13fed2e34bcabf2;p=talweg.git diff --git a/pkg/R/Forecast.R b/pkg/R/Forecast.R index 57817e7..bb665bd 100644 --- a/pkg/R/Forecast.R +++ b/pkg/R/Forecast.R @@ -1,57 +1,85 @@ -#' @title Forecast +#' Forecast #' -#' @description Forecast encapsulation +#' Forecast encapsulation as a list (days where prediction occur) of lists (components). #' -#' @field pred List with +#' The private field .pred is a list where each cell contains the predicted variables for +#' a period of time of H<=24 hours, from hour P+1 until P+H, where P+1 is taken right +#' after the end of the period designated by \code{getIndexInData()}. In other terms, +#' \code{forecast$getForecast(i)} return forecasts for \code{data$getSerie(i+1)}. +#' Each cell .pred[[i]] is itself a list containing three slots, as described in the +#' 'field' section. +#' +#' @usage f <- Forecast$new(dates) +#' +#' @field .pred List with #' \itemize{ -#' \item serie: forecasted serie +#' \item serie: the 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 (integer) day indices where forecast 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(forecast, params, index_in_data)}}{ +#' Acquire an individual forecast, with its (optimized) parameters and the +#' corresponding index in the dataset.} +#' \item{\code{getDates()}}{ +#' Get dates where forecast occurs.} +#' \item{\code{getForecast(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" +#' @docType class +#' @format R6 class +#' +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(forecast, params, index_in_data) { - length(pred) + private$.pred[[length(private$.pred)+1]] <- + list("forecast"=forecast, "params"=params, "index_in_data"=index_in_data) }, - getSerie = function(index) + getDates = function() + as.Date( private$.dates, origin="1970-01-01" ) + , + getForecast = function(index) { - "Get serie values at specified index" - - pred[[index]]$serie + if (is(index,"Date")) + index = match(index, private$.dates) + private$.pred[[index]]$forecast }, 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 } ) )