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 :

Probleme de sortie dans une boucle à condition


Sujet :

R

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 92
    Points : 54
    Points
    54
    Par défaut Probleme de sortie dans une boucle à condition
    bonjour à tous

    je fais un code où je fais une boucle pour vérifier tous les fichiers csv d'un répertoire, et s'il répond à une condition, il doit calculer la corrélation de deux colonnes à l'intérieur... oui mais voilà quand je lance, il me sort toujours que mon vecteur est null.... je pense que ça vient de ma condition, peut être elle me fait sortir de ma boucle je sais pas... parce que je trouve le temps de traitement trés court...

    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
    corr<-function(directory,threshold=0){
     
      liaison<- list.files(directory,full.names = TRUE)
      resultat<-data.frame()
      for (i in 332){
        ouvert<- read.csv(liaison[i])
        x<-complete.cases(ouvert)
        donnee<-ouvert[x,]
     
        nombre<-nrow(donnee)
     
          if (nombre>threshold){
     
              correlationu<-cor(donnee[,2],donnee[,3])
              resultat<-cbind(resultat,correlationu)
          }
      }
      resultat
     
    }

    merci pour votre aide

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Problème de sortie dans une boucle à condition
    Bonjour,

    Je vous conseille de procéder pas à pas sur un fichier, puis ajout de la boucle, puis ajout de la fonction. Vous identifierez plus facilement les erreurs.

    Cordialement,

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 92
    Points : 54
    Points
    54
    Par défaut
    Oui merci, je procède comme ça maintenant, et du coup j'ai un peu modifié mon code pour enlever la condition

    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
    corr<-function(directory,threshold=0){
      extract<-complete(directory)
      sub_extract<-extract[which(extract[,2]>threshold),]
      #liste<-vector(sub_extract[1])
      resultat<-vector()
     
      liaison<- list.files(directory,full.names = TRUE)
     
      for (i in sub_extract[1]){
          ouvert<- read.csv(liaison[i])
          x<-complete.cases(ouvert)
          donnee<-ouvert[x,]
     
              resultat[i]<-cor(donnee[,2],donnee[,3])
      }
      resultat
     
     
    }
    mais il ne veut pas lire mon énorme vecteur et le parcourir, enfin srtout le parcourir, il me sort
    Error in file(file, "rt") : invalid 'description' argument

    savez vous à quoi ça correspond je ne trouve pas pour l'instant

  4. #4
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Probleme de sortie dans une boucle à condition
    Bonjour,

    Je n'ai pas pu exécuter votre programme (fonction complete() non définie). Pensez à indiquer les packages utilisés.

    Error in file(file, "rt") : invalid 'description' argument
    Ce message signifie qu'il y a un problème d'accès aux fichiers. Vérifiez le contenu de la variable liaison.

    Cordialement,

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 92
    Points : 54
    Points
    54
    Par défaut
    ha oui désolé pour la fonction complete()

    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
    complete<-function(directory,id=1:332){
     
      liaison<- list.files(directory,full.names = TRUE)
      colo<-c("id","nobs")
      nb<-c(id)
      fichier<-data.frame()
     
      for (i in nb) {
        ouvert<- read.csv(liaison[i])
        x<-complete.cases(ouvert)
        y<-ouvert[x,]
     
        inter<-c(i,nrow(y))
        fichier<-rbind(fichier,inter)
      }
      fichier
     
    }
    cette fonction a pour but de parcourir les fichiers et d'indiquer le nombre de données complete à l'intérieur (parce qu'il y a beaucoup de NA parfois) et donc de les répertorier dans un tableau avec le nom du fichier correspondant ( les noms sont faciles, ce sont des numéros dans l'ordre ^^).
    Ha je n'arrive pas à donnée un nom à mes colonnes de cette dataframe, comme vous le voyez j'ai créé mon vecteur colo mais j'ai renoncé à l'utiliser...

    et donc du coup, mon autre fonction corr, utilise celle ci pour le répertoire, et j'aimerai qu'elle me calcule les corrélation entre les deux colonnes de chaque fichier, de tous les fichiers qui contiennent plus de x données complètes...
    mon vecteur sub_extract fonctionne et ma liaison aussi si je l'utilise seul... peut être il y a trop de répétition je sais pas...

  6. #6
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Problème de sortie dans une boucle à condition
    Bonjour,

    Pensez à imprimer des résultats intermédiaires pour tracer votre programme. Je trouve plus lisible de le faire en dehors de la fonction :

    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
    >   directory<-"D:/temp"
    >   threshold<-0
    >   extract<-complete(directory,id=1:2)
    >   sub_extract<-extract[which(extract[,2]>threshold),]
    >   print(sub_extract)
      X1L X19L
    1   1   19
    2   2   19
    >   #liste<-vector(sub_extract[1])
    >   resultat<-vector()
    >  
    >   liaison<- list.files(directory,full.names = TRUE)
    >   print(liaison)
    [1] "D:/temp/test1.csv" "D:/temp/test2.csv"
    >  
    >   for (i in sub_extract[1]){
    +       print(liaison[i])
    +       ouvert<- read.csv(liaison[i])
    +       x<-complete.cases(ouvert)
    +       donnee<-ouvert[x,]
    +       resultat[i]<-cor(donnee[,2],donnee[,3])
    +   }
    [1] "D:/temp/test1.csv" "D:/temp/test2.csv"
    Error in file(file, "rt") : invalid 'description' argument
    La fonction read.csv() reçoit comme argument la chaîne de caractères "D:/temp/test1.csv" "D:/temp/test2.csv", ce qui explique votre message d'erreur. Revoyez les indices de votre boucle.

    Cordialement,

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 92
    Points : 54
    Points
    54
    Par défaut
    Ha oui merci, super astuce !! j'ai compris d'où venait le problème... mais comme toujours, un problème ne survient jamais seul... J'ai bien corrigé mon erreur comme suit, à fin de prendre chaque numéro séparément et non pas tout d'un coup :
    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
     
    corr<-function(directory,threshold=0){
      extract<-complete(directory)
      sub_extract<-extract[which(extract[,2]>threshold),]
     
      liaison<- list.files(directory,full.names = TRUE)
     
     
      liste<-vector()
      nb<-nrow(sub_extract)
      resultat<-vector()
     
      for (i in nb){
        liste[i]<-sub_extract[i,1]
        isol<-liste[i]
        #print(liaison[isol]) 
        ouvert<- read.csv(liaison[isol])
        x<-complete.cases(ouvert)
        donnee<-ouvert[x,]
        lool<-c(cor(donnee[,2],donnee[,3]))
        resultat<-rbind(resultat,lool)
     
     
      }
     
      resultat
    }
    Maintenant le problème vient du fait que les résultats ne s'assemblent pas et juste le dernier ressort... J'ai essayé en mettant resultat[i] mais il me sort des NA jusqu'à la dernière valeur... et il fait pareil qu'importe le nombre de nb...

  8. #8
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Problème de sortie dans une boucle à condition
    Bonjour,

    Ajoutez un print(i) en début de boucle, vous comprendrez.

    Cordialement,

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 92
    Points : 54
    Points
    54
    Par défaut
    HA ben oui c'est pas un vecteur.... j'ai encore la logique vba i=0 to dans ma tête... Merci beaucoup en tout cas pour votre temps

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

Discussions similaires

  1. Probleme de syntaxe dans une boucle for
    Par spoker04 dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/09/2008, 10h12
  2. probleme pour rentrer dans une boucle
    Par tiya17 dans le forum C
    Réponses: 13
    Dernier message: 24/09/2007, 14h36
  3. probleme de variable dans une boucle
    Par www.rubis dans le forum Linux
    Réponses: 2
    Dernier message: 04/09/2007, 16h06
  4. probleme de passage dans une boucle
    Par EssaiEncore dans le forum ASP
    Réponses: 16
    Dernier message: 15/02/2005, 17h39
  5. probleme de recordset dans une boucle do while
    Par Shoryu dans le forum ASP
    Réponses: 18
    Dernier message: 05/07/2004, 15h30

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