close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 8 years ago

Last modified 8 years ago

#1946 new defect

Incongruencias en la función Serie del paquete R tolBasis para fechas iguales o anteriores a 1970

Reported by: Víctor de Buen Remiro Owned by: Jorge
Priority: normal Milestone: API nativa de acceso a R
Component: R API Version: 3.4
Severity: normal Keywords:
Cc: jsperez

Description

He encontrado algunas incongruencias en la función Serie del paquete R tolBasis para fechas iguales o anteriores a 1970.
Por ejemplo, si se quiere crear una serie mensual que empiece en febrero de 1970 no hay problema

require(tolBasis)
s <- Serie(c(1:10),Monthly,as.Date('1970-02-01'))
print(s)
1970-02-01 1 
1970-03-01 2 
1970-04-01 3 
1970-05-01 4 
1970-06-01 5 
1970-07-01 6 
1970-08-01 7 
1970-09-01 8 
1970-10-01 9 
1970-11-01 10 

Sin embargo si se quiere empezar en enero de 1970, la desplaza un mes hacia adelante y empieza en febrero de nuevo:

s <- Serie(c(1:10),Monthly,as.Date('1970-01-01'))
print(s)
1970-02-01 1 
1970-03-01 2 
1970-04-01 3 
1970-05-01 4 
1970-06-01 5 
1970-07-01 6 
1970-08-01 7 
1970-09-01 8 
1970-10-01 9 
1970-11-01 10 

En cambio, si se construye una serie diaria con el mismo origen lo hace bien

s <- Serie(c(1:10),Daily,as.Date('1970-01-01'))
print(s)
1970-01-01 1 
1970-01-02 2 
1970-01-03 3 
1970-01-04 4 
1970-01-05 5 
1970-01-06 6 
1970-01-07 7 
1970-01-08 8 
1970-01-09 9 
1970-01-10 10 

Change History (2)

comment:1 Changed 8 years ago by Pedro Gea

Es fallo del paquete de R lubridate en el que nos apoyamos:

ceiling_date(as.Date('1970-01-01'), "month", F) -> 1970-02-01
ceiling_date(as.Date('1971-01-01'), "month", F) -> 1971-01-01

Lo revisaré para ver qué pasa e intentar solucionarlo.

comment:2 Changed 8 years ago by Pedro Gea

Parece ser que el problema acaba descansando en la función fit_to_timeline que falla al adecuar una fecha anterior a 1970 que presenta décimas de segundo.

Véase el siguiente ejemplo:

a0 <- as.POSIXlt("1969-12-31 23:59:55.9", "GMT")
fit_to_timeline(a0, "POSIXct", F)==fit_to_timeline(a0, "POSIXlt", F) # -> F
a0 <- as.POSIXlt("1979-12-31 23:59:55.9", "GMT")
fit_to_timeline(a0, "POSIXct", F)==fit_to_timeline(a0, "POSIXlt", F) # -> T

Para solucionar esto e independizar algo más tolBasis podría ser interesante prescindir de lubridate e implementar nuestras propias funciones de redondeo en fechados, etc. Sobre todo si aceptamos prescindir definitivamente de los instantes más finos que la fecha en el tratamiento de fechados y series temporales.

Note: See TracTickets for help on using tickets.