chron et fonctions weekdays en francais

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

chron et fonctions weekdays en francais

Messagepar Serge Rapenne » 20 Oct 2008, 10:19

Bonjour à tous,

je viens de tomber sur un comportement étrange lié à l'utilisation du package chron.
Si je tape le code :

Code : Tout sélectionner

(today <- Sys.Date())
weekdays(today)

le résultats est le jour de la semaine en français sous forme de vecteur (aujourd'hui 20/10/08, j'obtiens "lundi" comme résultat)
par contre si je tape le code

Code : Tout sélectionner

dts <- dates("10/20/08")
weekdays(dts)

j'obtiens comme résultat un factor du style
[1] Mon
Levels: Sun < Mon < Tue < Wed < Thu < Fri < Sat

Je pense que c'est la surcharge de weekdays pour les objets chron qui ne gère pas la localisation. Y a t'il un moyen simple de modifier la fonction weekdays pour qu'elle s'affiche en français sans avoir à rentrer dans le code de chron, ou est il plus facile d'écrire une fonction joursemaine qui ferait la conversion et que je substituerais à la fonction weekdays (Remarque : le pb est le même avec la fonction months)

Merci d'avance pour vos lumières

Serge

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 20 Oct 2008, 11:36

Bonjour,

C'est un problème de classe et de programmation S3 :

Code : Tout sélectionner

class(dts)
[1] "dates" "times"

class(today)
[1] "Date"

methods("weekdays")
[1] weekdays.Date     weekdays.default* weekdays.POSIXt

# pour today la fonction utilisée sera weekdays.Date :
function (x, abbreviate = FALSE)
format(x, ifelse(abbreviate, "%a", "%A"))
<environment: namespace:base>

# pour dts il s'agira de weekdays.default :
getAnywhere("weekdays.default")
A single object matching ‘weekdays.default’ was found
It was found in the following places
  registered S3 method for weekdays from namespace chron
  namespace:chron
with value

function (x, abbreviate = TRUE)
{
    if (!inherits(x, "dates"))
        if ((is.character(x) || is.numeric(x)))
            x <- chron(x)
        else stop("x must inherit from dates")
    v <- month.day.year(as.numeric(x), origin. = origin(x))
    out <- day.of.week(v$month, v$day, v$year) + 1
    lbl <- if (abbreviate)
        day.abb
    else day.name
    out <- lbl[out]
    ordered(out, levels = lbl, labels = lbl)
}
<environment: namespace:chron>


weekday.default fait appel a la fonction ordered qui génère des facteurs ordonnés, alors que la fonction weekdays.Date fait juste appelle a la fonction format qui elle renvoie une chaîne de caractère.

Maxime

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Messagepar Serge Rapenne » 20 Oct 2008, 11:56

Merci Maxime pour ton explication, comme je ne suis pas à un gourou R je ne vais pas m'attaquer à la modification de weekdays, je vais substituer dans mon code la fonction weekdays pour les objets chron par la fonction joursem

Code : Tout sélectionner

joursem<-function(data,abbreviate=T){
   interm<-weekdays(data)
   if (abbreviate==T)
     dataout<-factor(interm,levels=c(levels(interm)[2:7],levels(interm)),labels=c("Lun","Mar","Mer","Jeu","Ven","Sam","Dim"))
   else
      dataout<-factor(interm,levels=c(levels(interm)[2:7],levels(interm)),labels=c("Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"))
   return(dataout)
    }

Encore merci

Serge


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité