X-Git-Url: https://git.auder.net/?p=talweg.git;a=blobdiff_plain;f=R%2FS_Neighbors.R;h=b8e32cc9df784852099e8596452e6cd60190981c;hp=c44bd9bebafe93f0aeeee05bc1c47018625b6e5c;hb=09cf9c19b5c6a04bc23c58b7ac8a4bbae2c6827d;hpb=3d69ff21e577fc7bb082257280661b64536c20e8 diff --git a/R/S_Neighbors.R b/R/S_Neighbors.R index c44bd9b..b8e32cc 100644 --- a/R/S_Neighbors.R +++ b/R/S_Neighbors.R @@ -23,9 +23,33 @@ NeighborsShapeForecaster = setRefClass( if (length(data$getCenteredSerie(1)) < length(data$getCenteredSerie(2))) first_day = 2 - # Predict only on non-NAs days (TODO:) - if (any(is.na(data$getSerie(today)))) - return (NA) + # Predict only on (almost) non-NAs days + nas_in_serie = is.na(data$getSerie(today)) + if (any(nas_in_serie)) + { + #TODO: better define "repairing" conditions (and method) + if (sum(nas_in_serie) >= length(nas_in_serie) / 2) + return (NA) + for (i in seq_along(nas_in_serie)) + { + if (nas_in_serie[i]) + { + #look left + left = i-1 + while (left>=1 && nas_in_serie[left]) + left = left-1 + #look right + right = i+1 + while (right<=length(nas_in_serie) && nas_in_serie[right]) + right = right+1 + #HACK: modify by-reference Data object... + data$data[[today]]$serie[i] <<- + if (left==0) data$data[[today]]$serie[right] + else if (right==0) data$data[[today]]$serie[left] + else (data$data[[today]]$serie[left] + data$data[[today]]$serie[right]) / 2. + } + } + } # Determine indices of no-NAs days followed by no-NAs tomorrows fdays_indices = c()