X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=pkg%2FR%2FForecast.R;h=783e3522e5add869ae89e58b80e18680e991c54f;hb=5d83d8150dc135347d5ef39e5015b88f33fa9ee3;hp=274f50eb7896511eca82cbbed8f7fdbae5c10575;hpb=1e20780ee1505fac6c7ed68d340892c497524561;p=talweg.git diff --git a/pkg/R/Forecast.R b/pkg/R/Forecast.R index 274f50e..783e352 100644 --- a/pkg/R/Forecast.R +++ b/pkg/R/Forecast.R @@ -1,59 +1,71 @@ -#' @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: 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 = c() ), - - 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() + private$.dates + , 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 } ) )