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 :

Comment réaliser une double boucle FOR ?


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Points : 18
    Points
    18
    Par défaut Comment réaliser une double boucle FOR ?
    Bonjour,

    Je sollicite votre aide pour un problème de double boucle sur R, je ne sais pas trop comment m'en sortir..

    Je suis sur un projet de recherche et je dois extraire des données d'un site internet de petites annonces. Les petites annonces sont réparties de la façon suivante : dans chaque page, il y a 35 petites annonces. Je souhaite récupérer les 35 liens vers les petites annonces plus détaillées, et ce, sur plusieurs pages, par exemple sur 5 pages.

    Tout d'abord, je récupère les liens des 5 pages avec la fonction sprintf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docu<-sprintf("http://www.leboncoin.fr/_loisirs_/offres/ile_de_france/?f=a&th=%s",1:5)
    Ensuite, je souhaite récupérer les 35 liens, quand je le fais pour une page ça fonctionne, voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    lien<-xpathSApply (htmlParse(docu[1]),
                       "//div[contains(@class,'list-lbc')]/a",
                       xmlGetAttr,name = "href")
    Mais lorsque je souhaite le faire pour les 5 pages en même temps, je ne sais pas trop comment m'y prendre, j'ai essayé une double boucle FOR, mais elle ne fonctionne pas, je ne sais pas trop comment la remplir de telle sorte que mon objet 'test" comporte les 175 liens que je souhaite récupérer...

    Voici le code que j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    test<-NA
    for (i in 1:5){ 
      for (j in 1:35){
    test[i,j]<-xpathSApply (htmlParse(docu[i]),
                       "//div[contains(@class,'list-lbc')]/a",
                       xmlGetAttr,name = "href")
                                 } }
    Mais R me renvoie l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur dans test[i, j] <- xpathSApply(htmlParse(docu[i]), "//div[contains(@class,'list-lbc')]/a",  : 
      nombre d'indices incorrect sur la matrice
    Si quelqu'un a une idée, je vous remercie d'avance.

  2. #2
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    Bonjour,
    Quand tu teste le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    docu <-sprintf("http://www.leboncoin.fr/_loisirs_/offres/ile_de_france/?f=a&th=%s",1:5)
    xpathSApply (htmlParse(docu[1]),"//div[contains(@class,'list-lbc')]/a", xmlGetAttr,name = "href")
    xpathSApply (htmlParse(docu[2]),"//div[contains(@class,'list-lbc')]/a", xmlGetAttr,name = "href")
    xpathSApply (htmlParse(docu[3]),"//div[contains(@class,'list-lbc')]/a", xmlGetAttr,name = "href")
    xpathSApply (htmlParse(docu[4]),"//div[contains(@class,'list-lbc')]/a", xmlGetAttr,name = "href")
    xpathSApply (htmlParse(docu[5]),"//div[contains(@class,'list-lbc')]/a", xmlGetAttr,name = "href")
    Tu auras des vecteurs dont les nombres d’éléments sont différents (35, 20, NULL, NULL, NULL).
    La fonction
    xpathSApply
    retourne un vecteur. Donc, vu que tes vecteurs n'ont pas les memes longueurs, tu n'auras pas d'autres alternatives que de passer par des listes.
    Essaye plutot ça, pour voir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Mylist <- list()
    for (i in 1:5){
      Mylist[[i]] <-xpathSApply (htmlParse(docu[i]),"//div[contains(@class,'list-lbc')]/a", xmlGetAttr,name = "href")}
    Une façon de faire est peut être d'utiliser les fonctions de récurrence (apply, sapply, ...), pour avoir quelque chose du genre ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    links <- sapply(docu, function(x){xpathSApply (htmlParse(x),"//div[contains(@class,'list-lbc')]/a", xmlGetAttr,name = "href")
    })
    A corriger et à adapter bien sûr !!!

    BC

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Points : 18
    Points
    18
    Par défaut
    C'est génial ça fonctionne!
    Merci beaucoup! je ne connaissais pas ces fonctions de récurrence!

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

Discussions similaires

  1. Sommer dans une double boucle for
    Par ju_cayenne dans le forum MATLAB
    Réponses: 1
    Dernier message: 09/09/2014, 15h23
  2. Réponses: 2
    Dernier message: 25/03/2014, 09h20
  3. [Débutant] Générer matrice à partir d'une double boucle for
    Par Matorzk dans le forum MATLAB
    Réponses: 2
    Dernier message: 22/10/2013, 23h12
  4. Comment réaliser une boucle pour remplir un tableau
    Par LVChatel dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 03/04/2009, 11h20
  5. Sortir d'une double boucle FOR-END
    Par azboul dans le forum MATLAB
    Réponses: 4
    Dernier message: 05/12/2007, 11h07

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