#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 9 years ago by
| Status: | new → accepted |
|---|
comment:2 Changed 9 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 9 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 9 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_datede "lubridate" que la llevaría a "2015-01-01" y a veces con elas.Datede "base" que la lleva a "2014-12-31".