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 :

Optimisation de code


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut Optimisation de code
    Bonjour,

    Je souhaiterais optimiser le code suivant (qui actuellement dure 1nuit).
    L'algorithme consiste à rapprocher les enregistrements de 2 tables sur la base du jour. La première table "tableCaptures" contient les captures d'un navire et la 2ème table "table2" contient les positions géographiques du navire et du temps passé correspondant. L'idée est de créer des métamarées à partir de ces 2 tables.
    • tableCaptures est de dimension 85 822 * 27
    • table2 est de dimension 458 534 * 24


    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
     
    listeNavires <- unique(tableCaptures$VESSEL_FK)
     
    #pour chaque navire
    for (k in 1:length(unique(tableCaptures$VESSEL_FK))){
        #traitement des captures
        navireTraite <- subset(tableCaptures,VESSEL_FK == listeNavires[k])
        table2_TRAITEE <- subset(table2_SEQUENCES,VESSEL_FK == listeNavires[k])
    #pour chaque jour
        for (i in 1:length(navireTraite$OPERATION_FK)){
            sequenceCapturestraitee <- tableCaptures[i,]
            #correspondance entre Captures et table2 au niveau du jour
            sequencestable2correspondantes <- subset(table2_TRAITEE, substr(sequenceCapturestraitee$START_DATE_TIME,1,10) == substr(START_DATE_TIME,1,10))
            if (length(unique(sequencestable2correspondantes$END_DATE_TIME))>0){
                listeSecteurs <- unique(sequencestable2correspondantes$SECT_LABEL)
                for (j in 1:length(listeSecteurs)){
                    nbMetaMarees <- nbMetaMarees + 1        
                    Captures_RAPPROCHE[nbMetaMarees,] <- sequenceCapturestraitee
                    Captures_RAPPROCHE[nbMetaMarees,]$SECTEUR_table2 <- listeSecteurs[j]           
                    Captures_RAPPROCHE[nbMetaMarees,]$FISHING_TIME_table2 <- sum(sequencestable2correspondantes$FISHING_TIME[sequencestable2correspondantes$SECT_LABEL == listeSecteurs[j] ])
               }
            } else { #sequence Captures orpheline
                nbSeqCapturesorphelines <- nbSeqCapturesorphelines + 1
                Captures_ORPHELINE[nbSeqCapturesorphelines,] <- sequenceCapturestraitee   
            }
        }
        table2_ORPHELINES <- subset(table2_TRAITEE, ! substr(END_DATE_TIME,1,10) %in% unique(substr(navireTraite$END_DATE_TIME,1,10)))
        table2_ORPHELINE_GLOBAL <- rbind(table2_ORPHELINE_GLOBAL,table2_ORPHELINES)
    }
    Peut-être y a t-il moyen d'utiliser autre chose que des boucles for, des subset(a priori l'utilisation de which n'accèlère pas le traitement) et du rbind ?

    Merci d'avance pour vos suggestions,

  2. #2
    Membre chevronné
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Par défaut Apply
    Bonjour,
    je n'ai pas regardé la totalité du code mais, avec R, il faut absolument éviter les boucles "for"...et préférer les fonctions apply, lapply ou sapply.
    Voir par exemple:http://cran.r-project.org/doc/contri...rdebuts_fr.pdf
    A bientôt et bon courage

  3. #3
    Membre chevronné
    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
    Par défaut
    Bonjour,

    Ce serait bien si tu pouvais préciser un peu plus ta requête. Quelle est la structure de tes deux bases de données et quel est le résultat que tu désires? Si c'est pas trop demander, tu pourrais nous filer aussi un exemple de données pour tes bases (fictives ou non)?

    Tu cherches à faire une jointure entre deux bases selon les navires et les jours c'est ça? Pour ça, voir

    HTH

    Vincent Chouraki

  4. #4
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut
    Bonjour,

    En fait j'ai diminué le nombre de colonnes de mes matrices et également utilisé la fonction merge.
    Maintenant tout fonctionne en 3h !

    Merci à vous.

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

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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