X-Git-Url: https://git.auder.net/?p=talweg.git;a=blobdiff_plain;f=R%2Futils.R;h=3777f2d8a51d57b0246849ec352434a758589731;hp=879a7d71f3b42662c2716056d33ea5f09829dd18;hb=09cf9c19b5c6a04bc23c58b7ac8a4bbae2c6827d;hpb=3d69ff21e577fc7bb082257280661b64536c20e8 diff --git a/R/utils.R b/R/utils.R index 879a7d7..3777f2d 100644 --- a/R/utils.R +++ b/R/utils.R @@ -8,23 +8,47 @@ #' @export dateIndexToInteger = function(index, data) { + index = index[1] if (is.numeric(index)) index = as.integer(index) - #Undocumented "private" method to translate index --> date (is needed) if (is.integer(index)) - return (index[1]) - if (is.character(index)) + return (index) + if (inherits(index, "Date") || is.character(index)) { - tryCatch(dt <- as.POSIXct(index[1]), finally=print("Unrecognized index format")) + tryCatch(dt <- as.POSIXct(index), error=function(e) stop("Unrecognized index format")) #TODO: tz arg to difftime ? - integerIndex <- as.integer( difftime(dt, data$getTime(1)) ) + 1 + integerIndex <- round( (as.numeric( difftime(dt, data$getTime(1)) ))[1] ) + 1 if (integerIndex > 0 && integerIndex <= data$getSize()) - return (integerIndex) + { + #WARNING: if series start at date >0h, result must be shifted + date1 = as.POSIXlt(data$getTime(1)[1]) + date2 = as.POSIXlt(data$getTime(2)[1]) + shift = (date1$year==date2$year && date1$mon==date2$mon && date1$mday==date2$mday) + return (integerIndex + ifelse(shift,1,0)) + } stop("Date outside data range") } stop("Unrecognized index format") } +#' @title integerIndexToDate +#' +#' @description Transform an integer index to date index (relative to data) +#' +#' @param index Date (or integer) index +#' @param data Object of class \code{Data} +#' +#' @export +integerIndexToDate = function(index, data) +{ + index = index[1] + if (is.numeric(index)) + index = as.integer(index) + if (!is.integer(index)) + stop("'index' should be an integer") + as.Date( data$getTime(index)[1] ) +} + #' @title getSimilarDaysIndices #' #' @description Find similar days indices in the past