2017-09-01 2 views
2

En ymd de lubridate, la valeur par défaut de tz était UTC. Je ne sais pas exactement quand le changement a été fait mais je sais que dans 1.5 la valeur par défaut était UTC mais dans 1.5.8 la valeur par défaut est maintenant NULL.Comment faire face au changement de défaut de lubridate's ymd

Cela change la sortie de ymd de POSIXct objets à Date objets qui casse beaucoup de mon code où je compte sur un objet ayant POSIXct mais maintenant un Date. Existe-t-il un moyen pratique de rendre cette compatibilité rétrocompatible ou ai-je besoin d'ajouter le tz='UTC' à tout mon ancien code qui comptait sur cela?

Répondre

2

Écrire un wrapper pour remplacer ymd avec ymd_hms pour lequel la valeur par défaut est toujours tz = "UTC"

library(lubridate) 
ymd2 = function(x){ 
    ymd_hms(paste(x, "00:00:00")) 
} 

ymd2("2017/3/4") 
#[1] "2017-03-04 UTC" 

class(ymd2("2017/3/4")) 
#[1] "POSIXct" "POSIXt" 
+0

ouais je pensais à faire un wrapper comme 'ymd2 <-fonction (x) AMJ (x, tz = 'UTC') 'mais j'espère quelque chose qui n'implique pas cela dans chaque morceau de code qui utilise' ymd'. –

+0

Eh bien, vous pourriez nommer le wrapper 'ymd' et ensuite appeler' lubridate :: ymd' avec l'argument 'tz' à l'intérieur pour éviter les conflits de noms ... Vous n'aurez donc pas à remplacer tous vos appels' ymd' dans le code existant , chargez simplement la fonction. Sinon, vous pourriez être bloqué en utilisant une ancienne version de 'lubridate'. Le paquet 'packrat' pourrait être utile dans ce cas. – mikeck

+1

Vous pouvez également envoyer une demande de fonctionnalité pour obtenir une option tz par défaut dans 'options': https://github.com/tidyverse/lubridate/issues. Je doute que vous soyez le seul à avoir ce problème de compatibilité de version. – mikeck