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 :

Stocker les résultats d'une boucle for() à l'aide d'une liste


Sujet :

R

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 31
    Points
    31
    Par défaut Stocker les résultats d'une boucle for() à l'aide d'une liste
    Bonjour tout le monde,

    J'ai un problème depuis 2 jours que je tente tant bien que mal de résoudre mais cela me laisse dans l'incompréhension la plus totale. Ce problème survient dans le cadre d'une étude sur les variations de cours sur le foreign exchange où je cherchais à stocker les résultats d'une boucle for() dans une liste. Au départ, j’ai 2 cadres de données : un cadre de variations de cours de 1 seconde et un cadre qui contient des dates et des heures de publications de nouvelles macroéconomique moins 1 minute. Un premier algorithme associe les variations d’une seconde du permier cadre avec des horaires et des dates de publication de nouvelles macroéconomiques stockées sur un second cadre grâce à la fonction merge() notamment et affiche ainsi les lignes pour lesquelles ces dates et heures correspondent dans le cadre en seconde et les stock dans un variable nommée « RM ». Ensuite, ces lignes sont comparées à chaque configurations de variations que j’ai mis en place et les numéros sont classés ainsi chacun dans les listes de la configuration qui correspond et c’est là que j’ai un problème. Voici ce que ça donne en code :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    > setwd("H:/")
    > GUS1 <- read.csv("CADRE EMSEMBLISTE O GBPUSD 1.csv", header = TRUE, dec = ".", sep = ";")
    > setwd("H:/Relevés des Jour-heure de publications suivant news")
    > PMIMUK <- read.csv("Jour-heure PMIM UK h-k inf ou égal à 8 pips.csv", header = TRUE, dec = ".", sep = ";")
    > MPM <- merge(PMIMUK, GUS1)
    > RM <- sort(MPM$ROW)
    > for(i in RM) {
    +     N <- which(GUS1$CHAMIN[(i+1):(i+360)] == 1)
    +     X <- GUS1$HIGH[(N[1]+i):(N[6]+i)]
    +     Y <- GUS1$LOW[(N[1]+i):(N[6]+i)]
    +     Z <- rbind(X,Y)
    +     G <- GUS1$SEC[i+N[1]-1]
    +     MATC <- c(53:59)    
    +     MI <- match(G, MATC)
    +     if(!is.na(MI))
    +     {
    +         h <- GUS1$HIGH[i+N[1]-1]
    +         k <- GUS1$LOW[i+N[1]-1]
    +     }
    +     if(is.na(MI))
    +     {
    +         h <- max(GUS1$HIGH[i:(i+N[1]-1)])
    +         k <- min(GUS1$LOW[i:(i+N[1]-1)])
    +     }
    +     m <- (h+k)/2
    +     e0 <- which(Z >= m + 0.0005)
    +     e10 <- which(Z <= m - 0.0005)
    +     e <- which(Z > m + 0.0010)
    +     e1 <- which(Z < m - 0.0010)
    +     A[i] <- if(!is.na(e1[1]) & !is.na(e10[1]) & is.na(e[1]) & is.na(e0[1]) & (e10[1] <= 120)){list(i)}
    + }
    > MAT <- match(RM, A)
    > CAS31 <- MAT[!is.na(MAT)]
    Et voilà ce que la console me retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error in A[i] <- if (!is.na(e1[1]) & !is.na(e10[1]) & is.na(e[1]) & is.na(e0[1]) &  : 
      object 'A' not found
    Je ne comprends pas bien où est l’erreur. Quelqu’un pourrait-il m’aider, svp ?
    Voici le lien pour le cadre contenant les dates/heures en question : p://www.cjoint.com/c/EGso3Hhk2da
    PS: Je ne sais pas comment vous faire parvenir le cadre des quotations en secondes car le fichier fait 70 Mo et n'ai pas accepté par cjoint. Si vous avez l'adresse d'un autre hébergeur comme celui-ci, faites le moi savoir svp. Cordialement

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Points : 461
    Points
    461
    Par défaut
    Salut,

    Il faut déclarer A.
    Rajoute avant de commencer ta boucle.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    Je ne vois très bien ce que je do ô s mettre dans c ()...tu pourrais m'éclairer, stp?

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2015
    Messages : 15
    Points : 32
    Points
    32
    Par défaut
    Il faut juste que A soit déclarer à quelque part avant de pouvoir accéder à A[i]... Il te suffit de rajouter avant la boucle

    et le code devrait passé...

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    bon, après avoir rajouté "A <- NULL" avant la boucle, cette fois l'erreur suivante survient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error in if (!is.na(MI)) { : argument is of length zero

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2015
    Messages : 15
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Magiceyes Voir le message
    bon, après avoir rajouté "A <- NULL" avant la boucle, cette fois l'erreur suivante survient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error in if (!is.na(MI)) { : argument is of length zero
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (!is.na(e1[1]) & !is.na(e10[1]) & is.na(e[1]) & is.na(e0[1]) & (e10[1] <= 120))
    te renvoie déjà un booléen, le if est de trop, vire le...

    ps.
    La fin de la ligne {list(i)}... me parait aussi étrange... Je n'arrive pas à la comprendre...

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Janvier 2012
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 325
    Points : 888
    Points
    888
    Par défaut
    En fait cette ligne qui pose problème est presque correcte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variable <- if(condition){valeur}
    Est presque équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(condition){variable <- valeur}

    "Presque" car dans le premier cas si la condition est fausse, dans le premier cas variable vaudra NULL et dans le second rien ne se passera.
    Du coup quand la condition est fausse ce que tu as écrit équivaut à :
    Ce qui entraine l'erreur (NULL est de longueur 0 alors qu'on attends une longueur 1).

    Il faut donc faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!is.na(e1[1]) & !is.na(e10[1]) & is.na(e[1]) & is.na(e0[1]) & (e10[1] <= 120)){A[i] <- list(i)}
    ou bien, si on veut mettre des NA quand la condition est fausse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A[i] <- if(!is.na(e1[1]) & !is.na(e10[1]) & is.na(e[1]) & is.na(e0[1]) & (e10[1] <= 120)){list(i)}else{NA}
    #ou de façon équivalente, mais peut être un peu plus claire
    A[i] <- ifelse(!is.na(e1[1]) & !is.na(e10[1]) & is.na(e[1]) & is.na(e0[1]) & (e10[1] <= 120),list(i),NA)

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    Ça y est ça fonctionne, c'était bien la position de A [i] le problème. Merci bcp Theta et Léon et @+ ;-)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/05/2013, 15h04
  2. Probleme dans une boucle for, faisant appel a une fonction
    Par mapotam dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 22/01/2010, 21h41
  3. Aide sur une boucle for
    Par Kemanke dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 11/12/2008, 14h13
  4. Affectation de variable boucle FOR à l'intérieur d'une boucle WHILE
    Par Droïde Système7 dans le forum Débuter
    Réponses: 10
    Dernier message: 05/11/2007, 19h11
  5. Décrémentation à l'aide d'une boucle FOR-END
    Par fouad192007 dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/06/2007, 17h54

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