IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Utilisation de la fonction "strftime" dans une boucle.


Sujet :

R

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur étude modélisation
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur étude modélisation

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Utilisation de la fonction "strftime" dans une boucle.
    Bonjour,
    je débute dans ce langage et je bloque sur le script suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # Extraction des BGD a partir des archives
    # Sequence de date
    seq(as.Date("2013-01-07"), as.Date("2013-01-20"),"day")
    # Dossier des archives
    dirin <- c("//172.16.13.218/dp/URBANAIR_V2/output_archive")
    dirout <- c("C:/tmp")
    # Maille à extraire
    XX <- 75
    YY <- 28
    # Ligne de debut et de fin (positions des lignes correspondant à l'échéance (39-62 pour J-0))
    start<-39
    end <- 62
     
    # Programme
    out_J0<-vector()
    for (i in 1:length(date))
    {
    jour <- date [i]
    name_fichier_BGD_jour <- paste(dirin,"/", jour,"/",jour,"/CHM_AIRES_",jour,"_",XX,"_",YY,".BGD",sep="")
    fichier_BGD <- scan(name_fichier_BGD_jour,what="numeric")
    seq_J0 <-fichier_BGD[start:end ] 
    out_J0 <-c(out_J0,seq_J0)
    }
    write(out_J0,file=paste(dirout,"/CHM_AIRES_J0_",XX,"_",YY,sep=""))

    Le but de ce script est d'aller lire une série de fichiers selon une période donnée, de récupérer une partie de ce fichier (lignes 39 à 62) et de les copier dans un nouveau fichier.
    Je créé dont une séquence de date, qui correspond à cette période.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    seq(as.Date("2013-01-07"), as.Date("2013-01-20"),"day")
    me renvoie bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     [1] "2013-01-07" "2013-01-08" "2013-01-09" "2013-01-10" "2013-01-11" "2013-01-12" "2013-01-13"
     [8] "2013-01-14" "2013-01-15" "2013-01-16" "2013-01-17" "2013-01-18" "2013-01-19" "2013-01-20"

    Mais c'est la boucle de lecture qui ne fonctionne pas:
    -Ma séquence à le format date YYYY-MM-DD alors que mes fichiers ont le format YYYYMMDD.
    -J'essaye d'intégrer la fonction "strftime(d, "%Y%m%d")" mais je n'arrive pas à la placer correctement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (i in 1:length(date))
    {
    jour <- date [i] as strftime(d, "%Y%m%d")

    Un peu d’aide serait la bienvenue.

    Merci beaucoup.

  2. #2
    Membre confirmé
    Homme Profil pro
    MCU
    Inscrit en
    Juillet 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : MCU
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 185
    Points : 486
    Points
    486
    Par défaut
    Bonjour,

    Si vous n'utilisez que la chaine de caractere de votre vecteur de dates, vous pouvez utiliser la fonction format:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vecteur.date <- seq(as.Date("2013-01-07"), as.Date("2013-01-20"),"day")
    format(vecteur.date, format="%Y%m%d")
    et utiliser ca dans votre boucle.

    Une remarque, "date" est le nom d'une fonction en R, ce qui peut causer des erreurs si vous affectez ce nom a un objet.

    HTH

    Vincent

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur étude modélisation
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur étude modélisation

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre réponse.

    J'ai du adapté votre morceau de code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vecteur.date <- seq(as.Date("2013-01-07"), as.Date("2013-01-20"),"day")
    vecteur.date <- format(vecteur.date, format="%Y%m%d")
    En effet, si la fonction format transformait bien les dates, elle ne les gardait pas en mémoire dans la console.

    Merci pour votre aide.

    Problème résolu.

  4. #4
    Membre confirmé
    Homme Profil pro
    MCU
    Inscrit en
    Juillet 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : MCU
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 185
    Points : 486
    Points
    486
    Par défaut
    Bonjour,

    Ah oui, R n'est pas un langage tres "mutable". Il faut tout reaffecter. Si vous voulez plus d'informations, vous pouvez voir http://adv-r.had.co.nz/R5.html par exemple.

    HTH

    Vincent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [vbnet 1.1]Inserer deux simple quote sans texte dans une db
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 8
    Dernier message: 15/03/2007, 08h51
  2. Réponses: 1
    Dernier message: 13/03/2007, 08h34
  3. Réponses: 11
    Dernier message: 18/02/2007, 23h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo