#'
#' Data encapsulation, in the form of a few lists (time-series + exogenous variables).
#'
-#' The private field .tv is a list where each cell contains the hourly variables for a
+#' The private field .tvp is a list where each cell contains the hourly variables for a
#' period of time of 24 hours, from 1am to next midnight. The other lists contain
#' informations on series' levels and exogenous variables (both measured and predicted).
#'
#' @usage # Data$new()
#'
-#' @field .tv List of "time-values"; in each cell:
+#' @field .tvp List of "time-values"; in each cell:
#' \itemize{
#' \item time: vector of times
#' \item serie: (measured) serie
+#' \item level_hat: predicted level for current day
#' }
#' @field .level Vector of measured levels
-#' @field .level_hat Vector of predicted levels
#' @field .exo List of measured exogenous variables, cell = numerical vector.
#' @field .exo_hat List of predicted exogenous variables, cell = numerical vector.
#'
#' \item{\code{getLevel(index)}}{
#' Measured level at specified index.}
#' \item{\code{getLevelHat(index)}}{
-#' Predicted level at specified index.}
+#' Predicted level vector at specified index (by hour).}
#' \item{\code{getCenteredSerie(index)}}{
#' Centered serie at specified index.}
#' \item{\code{getCenteredSeries(indices)}}{
#'
Data = R6::R6Class("Data",
private = list(
- .tv = list(),
+ .tvp = list(),
.level = vector("double",0),
- .level_hat = vector("double",0),
.exo = list(),
.exo_hat = list()
),
public = list(
getSize = function()
- length(private$.tv)
+ length(private$.tvp)
,
append = function(time=NULL, value=NULL, level_hat=NULL, exo=NULL, exo_hat=NULL)
{
- if (!is.null(time) && !is.null(value))
+ if (!is.null(time) && !is.null(value) && !is.null(level_hat))
{
- L = length(private$.tv)
- if (L == 0 || strftime( tail(private$.tv[[L]]$time,1),
+ L = length(private$.tvp)
+ if (L == 0 || strftime( tail(private$.tvp[[L]]$time,1),
format="%H:%M:%S", tz="GMT" ) == "00:00:00")
{
# Append a new cell
- private$.tv[[L+1]] <- list("time"=time, "serie"=value)
+ private$.tvp[[L+1]] <- list("time"=time, "serie"=value, "level_hat"=level_hat)
}
else
{
# Complete current cell
- private$.tv[[L]]$time = c(private$.tv[[L]]$time, time)
- private$.tv[[L]]$serie = c(private$.tv[[L]]$serie, value)
+ private$.tvp[[L]]$time <- c(private$.tvp[[L]]$time, time)
+ private$.tvp[[L]]$serie <- c(private$.tvp[[L]]$serie, value)
+ private$.tvp[[L]]$level_hat <- c(private$.tvp[[L]]$levem_hat, level_hat)
}
}
- if (strftime( tail(private$.tv[[length(private$.tv)]]$time,1),
- format="%H:%M:%S", tz="GMT" ) == "00:00:00")
+ if (strftime( tail(private$.tvp[[length(private$.tvp)]]$time,1),
+ format="%H:%M:%S", tz="GMT" ) == "00:00:00")
{
private$.level = c(private$.level,
- mean(private$.tv[[length(private$.tv)]]$serie, na.rm=TRUE))
+ mean(private$.tvp[[length(private$.tvp)]]$serie, na.rm=TRUE))
}
- if (!is.null(level_hat))
- private$.level_hat = c(private$.level_hat, level_hat)
if (!is.null(exo))
private$.exo[[length(private$.exo)+1]] = exo
if (!is.null(exo_hat))
getTime = function(index)
{
index = dateIndexToInteger(index, self)
- private$.tv[[index]]$time
+ private$.tvp[[index]]$time
},
getSerie = function(index)
{
index = dateIndexToInteger(index, self)
- private$.tv[[index]]$serie
+ private$.tvp[[index]]$serie
},
getSeries = function(indices)
sapply(indices, function(i) self$getSerie(i))
getLevelHat = function(index)
{
index = dateIndexToInteger(index, self)
- private$.level_hat[index]
+ private$.tvp[[index]]$level_hat
},
getCenteredSerie = function(index)
{
index = dateIndexToInteger(index, self)
- private$.tv[[index]]$serie - private$.level[index]
+ private$.tvp[[index]]$serie - private$.level[index]
},
getCenteredSeries = function(indices)
sapply(indices, function(i) self$getCenteredSerie(i))