#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
Status: | new → accepted |
---|
comment:2 Changed 8 years ago by
Ú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
(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:5 Changed 8 years ago by
Resolution: | → fixed |
---|---|
Status: | accepted → closed |
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.
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" eseanytime(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 elas.Date
de "base" que la lleva a "2014-12-31".