X-Git-Url: https://git.auder.net/js/rpsls.js?a=blobdiff_plain;f=pkg%2FR%2FF_Persistence.R;fp=pkg%2FR%2FF_Persistence.R;h=19cf2e410e3e255ddabcc57326321cc1ef510679;hb=469529710f56c790ae932b45d13fed2e34bcabf2;hp=0000000000000000000000000000000000000000;hpb=4c59ec9aefef8ea5464723a293b3aa39ee02dc60;p=talweg.git diff --git a/pkg/R/F_Persistence.R b/pkg/R/F_Persistence.R new file mode 100644 index 0000000..19cf2e4 --- /dev/null +++ b/pkg/R/F_Persistence.R @@ -0,0 +1,36 @@ +#' @include Forecaster.R +#' +#' @title Persistence Forecaster +#' +#' @description Return the last centered (similar) day curve. +#' Inherits \code{\link{Forecaster}} +PersistenceForecaster = setRefClass( + Class = "PersistenceForecaster", + contains = "Forecaster", + + methods = list( + initialize = function(...) + { + callSuper(...) + }, + predictShape = function(today, memory, horizon, ...) + { + # Return centered last (similar) day curve, avoiding NAs until memory is run + first_day = max(1, today-memory) + same_day = ifelse(hasArg("same_day"), list(...)$same_day, TRUE) + # If 'same_day', get the last known future of similar day: -7 + 1 == -6 + index = today - ifelse(same_day,6,0) + repeat + { + { + last_serie = data$getCenteredSerie(index)[1:horizon] + index = index - ifelse(same_day,7,1) + }; + if (!any(is.na(last_serie))) + return (last_serie); + if (index < first_day) + return (NA) + } + } + ) +)