fix 2 tests out of 3; TODO: test forecasters
[talweg.git] / pkg / R / utils.R
index 3777f2d..de8e861 100644 (file)
@@ -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")
        }