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 boucle for r


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Data scientist
    Inscrit en
    Février 2017
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data scientist
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 211
    Par défaut Optimisation boucle for r
    Bonjour,

    j'aimerai optimiser cette boucle s'il vous plait. par un remplacement par la fonction apply ou autre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    for( i in 1:nrow(donnee_finale))
    {
      donnee_finale[i,22] <- sum(donnee_finale[i, c(6,8,10,12,14)] < donnee_finale[i, 16]  ,na.rm = T)
    }

  2. #2
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut Pas de boucle
    Bonjour,

    Vous n'avez pas besoin de boucle. Les opérations se font en parallèle sur les observations.

    Cordialement,

  3. #3
    Membre expérimenté
    Homme Profil pro
    Data scientist
    Inscrit en
    Février 2017
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data scientist
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 211
    Par défaut
    Bonjour,

    Quand je lance sans boucle.

    j'ai un problème de dimension.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Error: (list) object cannot be coerced to type 'double'
    In addition: Warning messages:
    1: Incompatible methods ("Ops.data.frame", "Ops.Date") for "<" 
    2: In donnee_finale[, c(6, 8, 10, 12, 14)] < donnee_finale[, 16] :
      longer object length is not a multiple of shorter object length
    voilà un extrait des données.
    boucle.xlsx

    le code utilisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    for( i in 1:nrow(donnee_finale))
    {
      donnee_finale[i,22] <- sum(donnee_finale[i, c(6,8,10,12,14)] < donnee_finale[i, 16]  ,na.rm = T)
    }
    Merci.

  4. #4
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut Pas de boucle
    Bonjour,

    Vous avez le même problème avec la boucle mais il est caché dans les warnings :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    > donnee_finale <- read.xlsx(file="d:/temp/boucle.xlsx", sheetIndex="boucle", header=TRUE, colClasses=NA)
    > for( i in 1:nrow(donnee_finale))
    + {
    +   donnee_finale[i,22] <- sum(donnee_finale[i, c(6,8,10,12,14)] < donnee_finale[i, 16]  ,na.rm = T)
    + }
    There were 50 or more warnings (use warnings() to see the first 50)
    > warnings()
    Messages d'avis :
    1: In donnee_finale[i, c(6, 8, 10, 12, 14)] < donnee_finale[i,  ... :
      Méthodes incompatibles ("Ops.data.frame", "Ops.Date") pour "<"
    Cordialement,

  5. #5
    Membre expérimenté
    Homme Profil pro
    Data scientist
    Inscrit en
    Février 2017
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data scientist
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 211
    Par défaut
    Bonjour,

    Avec la boucle il mets des warnings mais calcul quand même. Sans boucle il mets une erreur mais lance pas le calcul.

  6. #6
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut Vérifiez votre programme pas à pas
    Bonjour,

    • Avez-vous vérifié l'import de vos données avec la fonction str() ?

    • Ce n'est pas parce que le programme tourne qu'il produit le résultat attendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    > donnee_finale[1, c(6,8,10,12,14)]
      Date_sus.1 Date_sus.2 Date_sus.3 Date_sus.4 Date_sus.5
    1         NA         NA         NA         NA         NA
    > donnee_finale[1, 16]
    [1] "2019-01-01"
    > sum(donnee_finale[1, c(6,8,10,12,14)] < donnee_finale[1, 16], na.rm=T)
    [1] 5
    Warning message:
    Méthodes incompatibles ("Ops.data.frame", "Ops.Date") pour "<"
    Cordialement,

  7. #7
    Membre expérimenté
    Homme Profil pro
    Data scientist
    Inscrit en
    Février 2017
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data scientist
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 211
    Par défaut
    Bonjour,

    Oui j'ai vérifié l'importation des variables.

    J'ai trouvé une solution alternative. c'est de diviser le calcul en deux étapes. faire les tests 1 par 1 ensuite faire la sum.

    Merci pour votre aide.

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

Discussions similaires

  1. Optimisation boucle for
    Par bertindenis dans le forum MATLAB
    Réponses: 4
    Dernier message: 13/10/2017, 23h37
  2. [XL-2010] Optimisation boucle for (temps d’exécution trop important)
    Par barbeaua dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 20/07/2016, 15h25
  3. optimisation boucle for
    Par achtlos dans le forum Images
    Réponses: 1
    Dernier message: 29/05/2011, 09h53
  4. Optimisation boucle for
    Par kwatz dans le forum MATLAB
    Réponses: 10
    Dernier message: 03/03/2009, 08h48
  5. [Optimisation] Boucles for ou while et mysql_result ?
    Par sorenson dans le forum Langage
    Réponses: 5
    Dernier message: 22/12/2006, 09h55

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