- params <<- list("weights"=NA, "indices"=NA, "window"=NA)
-
- first_day = max(today - memory, 1)
- # The first day is generally not complete:
- if (length(data$getCenteredSerie(1)) < length(data$getCenteredSerie(2)))
- first_day = 2
-
- # 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.
- }
- }
- }