From 7c4b2952874de1d40a742e72efe51999b99050f5 Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Tue, 30 May 2017 12:58:29 +0200
Subject: [PATCH] prepare last changes

---
 pkg/R/Data.R        | 42 ++++++++++++++++++++----------------------
 pkg/R/F_Neighbors.R |  4 ++--
 2 files changed, 22 insertions(+), 24 deletions(-)

diff --git a/pkg/R/Data.R b/pkg/R/Data.R
index d35c88a..8aa149d 100644
--- a/pkg/R/Data.R
+++ b/pkg/R/Data.R
@@ -2,19 +2,19 @@
 #'
 #' 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.
 #'
@@ -34,7 +34,7 @@
 #' \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)}}{
@@ -50,42 +50,40 @@
 #'
 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))
@@ -94,12 +92,12 @@ Data = R6::R6Class("Data",
 		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))
@@ -112,12 +110,12 @@ Data = R6::R6Class("Data",
 		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))
diff --git a/pkg/R/F_Neighbors.R b/pkg/R/F_Neighbors.R
index eb0dd79..8eb1ddc 100644
--- a/pkg/R/F_Neighbors.R
+++ b/pkg/R/F_Neighbors.R
@@ -57,8 +57,8 @@ NeighborsForecaster = R6::R6Class("NeighborsForecaster",
 			if (!opera)
 				tdays = setdiff(tdays, today) #always exclude current day
 
-			# Shortcut if window is known or local==TRUE && simtype==none
-			if (hasArg("window") || (local && simtype=="none"))
+			# Shortcut if window is known #TODO: cross-validation for number of days, on similar (yerste)days
+			if (hasArg("window"))
 			{
 				return ( private$.predictShapeAux(data, tdays, today, predict_from, horizon,
 					local, list(...)$window, simtype, opera, TRUE) )
-- 
2.44.0