X-Git-Url: https://git.auder.net/?p=talweg.git;a=blobdiff_plain;f=pkg%2FR%2Futils.R;h=de8e861cb5c02ab5e0e2c1bc2f26f527b1c34589;hp=3777f2d8a51d57b0246849ec352434a758589731;hb=44a9990b6d608ffcd2e99d5193fa8b9e6cbdb436;hpb=16209589215b8300e07e3525ae5bcb236d6f7008 diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 3777f2d..de8e861 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -15,16 +15,22 @@ dateIndexToInteger = function(index, data) return (index) if (inherits(index, "Date") || is.character(index)) { - tryCatch(dt <- as.POSIXct(index), error=function(e) stop("Unrecognized index format")) + tryCatch(indexAsDate <- as.Date(index), error=function(e) stop("Unrecognized index format")) #TODO: tz arg to difftime ? - integerIndex <- round( (as.numeric( difftime(dt, data$getTime(1)) ))[1] ) + 1 - if (integerIndex > 0 && integerIndex <= data$getSize()) + integerIndex <- round( as.numeric( + difftime(indexAsDate, as.Date(data$getTime(1)[1])) ) ) + 1 + if (integerIndex >= 1 && integerIndex <= data$getSize()) { - #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)) + #WARNING: if index>=2 && series start at date >0h, result must be shifted + #Convention: if first date asked, return first matching index (i.e.: 1) + shift = 0 + if (integerIndex >= 2) + { + 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 + shift) } stop("Date outside data range") }