C'est une façon de rester dans le cadre de la POSIXct
univers de lubridate
et ne pas changer les formats de date en fonction des R de base POSIXt
. J'évite de changer le format de la date dans mes scripts car je trouve que c'est un endroit fréquent où des bugs (par exemple des changements de fuseaux horaires ou des pertes d'horodatage) sont introduits. Il suit ce conseil d'utiliser %m+%
: R : ajout d'un mois à une date
# example date is a leap day for a "worst case scenario"
library("lubridate")
posixct.in <- parse_date_time(x = "2016-02-29", orders = "ymd")
# [1] "2016-02-29 UTC"
posixct.seq <- posixct.in %m+% years(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2017-02-28 UTC" "2018-02-28 UTC" "2019-02-28 UTC"
posixct.seq <- posixct.in %m+% months(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2016-03-29 UTC" "2016-04-29 UTC" "2016-05-29 UTC"
posixct.seq <- posixct.in %m+% days(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2016-03-01 UTC" "2016-03-02 UTC" "2016-03-03 UTC"
posixct.seq <- posixct.in %m+% weeks(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2016-03-07 UTC" "2016-03-14 UTC" "2016-03-21 UTC"
Un régulier +
fonctionne aussi parfois, mais le %m+%
évite des erreurs comme celle-ci :
posixct.seq <- posixct.in + years(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" NA NA NA
Au début, j'étais confus parce que je pensais %m+
n'était qu'un moyen d'ajouter des mois, et des similaires lubridate
des commandes comme %y+%
etc. n'existent pas. Mais, il s'avère que le "m" ne signifie pas "ajout de mois". Je dirais plutôt "magie" =)