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

Closed 8 years ago

Last modified 8 years ago

#1943 closed defect (fixed)

Sfirst no devuelve lo mismo que el print de Serie

Reported by: Jorge Owned by: Pedro Gea
Priority: high Milestone: Mantainance
Component: R API Version: 3.4
Severity: major Keywords:
Cc:

Description

Debajo aparece la ejecución de las instrucciones:

require(anytime)
require(tolBasis)
s = Serie(rnorm(12), Monthly, anytime(2015))
s
Sfirst(s)
require(anytime)
> require(anytime)
Loading required package: anytime
> require(tolBasis)
Loading required package: tolBasis
Loading required package: lubridate

Attaching package: ‘lubridate’

The following object is masked from ‘package:base’:

    date

> s = Serie(rnorm(12), Monthly, anytime(2015))
> s
2015-01-01 -0.8834656 
2015-02-01 -0.02837307 
2015-03-01 -0.3582061 
2015-04-01 -1.919292 
2015-05-01 -0.1775852 
2015-06-01 0.5404666 
2015-07-01 1.178675 
2015-08-01 1.314704 
2015-09-01 0.9296631 
2015-10-01 1.189989 
2015-11-01 0.5829331 
2015-12-01 -0.1527351 
> Sfirst(s)
[1] "2014-12-31"
>

Puede verse que Sfirst está retornando una fecha que no es del fechado de s.

Change History (7)

comment:1 Changed 8 years ago by Pedro Gea

Status: newaccepted

El problema proviene de que anytime(2015) no es una fecha estrictamente hablando, sino un instante (representado en R como tiempo POSIX). Concretamente en una máquina en la zona horaria "UTC+01:00" ese anytime(2015) corresponde con "2014-12-31T23:59:00Z".

Internamente tolBasis trata estas casi fechas aproximándolas con criterios diferentes (por eso el problema) a veces con un round_date de "lubridate" que la llevaría a "2015-01-01" y a veces con el as.Date de "base" que la lleva a "2014-12-31".

comment:2 Changed 8 years ago by Pedro Gea

Úsese la función utcdate de anytime para evitar estas ambigüedades.

require(anytime)
require(tolBasis)
s = Serie(rnorm(12), Monthly, utcdate(2015))
s
Sfirst(s)

comment:3 Changed 8 years ago by Pedro Gea

(In [7410]) Refs #1943
Se revisa el uso de los POSIXt y las zonas horarias para evitar que la zona horaria local afecte a la interpretación de una fecha TOL.
Todas los instantes (gramática Date) de TOL serán entendidos como UTC.
Nótese que con este criterio la variable Now de TOL no da el tiempo correcto. Quizá TOL debería revisar esto.

comment:4 Changed 8 years ago by Pedro Gea

(In [7411]) Refs #1943
Se actualizan los paquetes.

comment:5 Changed 8 years ago by Pedro Gea

Resolution: fixed
Status: acceptedclosed

Tras las últimas revisiones el código propuesto:

s = Serie(rnorm(12), Monthly, anytime(2015))

dará un error advirtiendo que la fecha de inicio de la serie no pertenece al fechado:

Error: Dbelong(begin, dating) is not TRUE 

salvo que se esté en la zona horaria 00:00.

Úsense utctime y utcdate (en lugar de anytime y anydate) para evitar la ambigüedad causada por la zona horaria.

comment:6 Changed 8 years ago by Pedro Gea

(In [7426]) Refs #1943
Se usa RapidJSON y se agiliza la serialización eliminando el uso de getOptArg.

comment:7 Changed 8 years ago by Pedro Gea

(In [7434]) Refs #1943
Se revisa la deserialización de objetos de TOL.

Note: See TracTickets for help on using tickets.