[RÉSOLU] Bug ?

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Dominique Soudant
Messages : 758
Enregistré le : 23 Avr 2008, 11:12
Contact :

[RÉSOLU] Bug ?

Messagepar Dominique Soudant » 02 Fév 2018, 14:07

Bonjour,

je dois merger 855 (pour cette fois) data frame. J'ai commis le code suivant (j'ai essayé une fonction recursive avant mais j'atteignais la limite de stack du C ... j'ai pas noté l'erreur pour être honnête je suis passé à une méchante boucle, cf ci-dessous donc) :

Code : Tout sélectionner

mergeThemAll <- function(Files,SmoothedVar){
  # traitement du premier fichier
  # lecture du fichier
  Courant <- read.csv2(Files[1]
                        ,dec="."
                        ,stringsAsFactors=FALSE
                        )

  # récupération de l'identifiant série
  Serie <- Courant$Serie[1]

  # Sélection des variables d'intérêt
  Courant <- Courant[,c("YearTS",SmoothedVar)]

  # trace d’exécution
  cat(length(Files)
#      ,Files[1]
      ,"\n")
 
  # substitution du nom de la variable par le nom de la série
  names(Courant)[2] <- Serie
  Courant$YearTS <- round(Courant$YearTS,3) 

  # Initialisation des objets de la boucle.
  Compile <- Courant 
  Files <- Files[-1]

  # Boucle identique au code ci-dessous
  while(length(Files) != 0){
    Courant <- read.csv2(Files[1]
                        ,dec="."
                        ,stringsAsFactors=FALSE
                        )
   
    Serie <- Courant$Serie[1]

    Courant <- Courant[,c("YearTS",SmoothedVar)]
    cat(length(Files),Files[1],"\n")

    names(Courant)[2] <- Serie
    Courant$YearTS <- round(Courant$YearTS,3)

#if(Serie == "074-P-035 SurfTo5m") browser()
   
    Compile <- IFR.merge(Compile,Courant,all=TRUE)

if(any(duplicated(Compile$YearTS))) browser()

    Files <- Files[-1]
  }
  return(Compile)
}
À la fin, on voit qu'il y a 2 bouts de code pour le débogage. Si je fais tourner tel que ci-dessus, j'ai un arrêt de débogage et la trace d'exécution montre :

Code : Tout sélectionner

Merge de Compile (3067 lignes) et Courant (233 lignes) .
Il en résulte 3067 lignes.
59 ./LERPC/DLM/Out/TEMP/Current/074-P-025 SurfTo5m 016/016 074-P-025 SurfTo5m TEMP 00 .csv

Merge de Compile (3067 lignes) et Courant (704 lignes) .
Il en résulte 3067 lignes.
58 ./LERPC/DLM/Out/TEMP/Current/074-P-035 SurfTo5m 307/307 074-P-035 SurfTo5m TEMP 00 .csv

Merge de Compile (3067 lignes) et Courant (521 lignes) .
Il en résulte 3588 lignes.
Called from: mergeThemAll(Files, "Level")
Browse[1]>
L'arrêt se fait lorsque j'ai des valeurs dupliquées dans la variable YearTS qui est une date au format année+fraction d'année, par exemple 1993+1/52=1993,019230769 que j'ai arrondi à 3 chiffres après la virgule, soit 1993.0192. J'en suis au 855-58=797ième data frame, à ce stade j'ai toutes les dates possible, ou j'en suis très proche => 3067 lignes qui ne changent pas pour les derniers data frame ajoutés mais au dernier merge, les 521 lignes du nouveau data frame sont ajoutées comme si les dates n'avaient jamais été rencontrées (3067+521=3588). Dans compile on trouve :

Code : Tout sélectionner

       YearTS 074-P-035 SurfTo5m 106-P-013 SurfTo5m 074-P-001 SurfTo5m 106-P-011 SurfTo5m
1355 1993.208                 NA                 NA                 NA                 NA
1356 1993.212           13.59275           16.22678           14.09804           16.64726
1357 1993.212           13.59295                 NA                 NA                 NA
1358 1993.231           13.61388           16.23150           14.11052           16.64693
1359 1993.231           13.61407                 NA                 NA                 NA
1360 1993.250           13.63500           16.23622           14.12300           16.64660
1361 1993.250           13.63519                 NA                 NA                 NA
1362 1993.269           13.65612           16.24095           14.13549           16.64627
1363 1993.269           13.65630                 NA                 NA                 NA
1364 1993.288           13.67725           16.24567           14.14797           16.64594
1365 1993.288           13.67742                 NA                 NA                 NA
Il y a bien des lignes dupliquées. Alors que dans le fichier original on a :

Code : Tout sélectionner

Browse[1]> head(Courant)
    YearTS 074-P-035 SurfTo5m
1 1993.212           13.59295
2 1993.231           13.61407
3 1993.250           13.63519
4 1993.269           13.65630
5 1993.288           13.67742
6 1993.308           13.69854
Donc non seulement on a des lignes dupliquées mais en plus on a des valeurs "inventées" ... :-/

Si je m’arrête avant la catastrophe (i.e. en dé-commentant le premier code de débogage) et que j'exécute la ligne de merge ...

Code : Tout sélectionner

Merge de Compile (3066 lignes) et Courant (1092 lignes) .
Il en résulte 3066 lignes.
295 ./LERMPL/DLM/Out/TEMP/Current/074-P-016 SurfTo5m 067/067 074-P-016 SurfTo5m TEMP 00 .csv

Merge de Compile (3066 lignes) et Courant (233 lignes) .
Il en résulte 3066 lignes.
294 ./LERMPL/DLM/Out/TEMP/Current/074-P-025 SurfTo5m 016/016 074-P-025 SurfTo5m TEMP 00 .csv

Merge de Compile (3066 lignes) et Courant (704 lignes) .
Il en résulte 3066 lignes.
293 ./LERMPL/DLM/Out/TEMP/Current/074-P-035 SurfTo5m 306/306 074-P-035 SurfTo5m TEMP 00 .csv
Called from: mergeThemAll(Files, "Level")
Browse[1]>     Compile <- IFR.merge(Compile,Courant,all=TRUE)

Merge de Compile (3066 lignes) et Courant (521 lignes) .
Il en résulte 3066 lignes.
Browse[1]> any(duplicated(Compile$YearTS))
[1] FALSE
Pas de date dupliquée ... (je remarque au passage qu'on est passé de 3067 lignes à 3066 ... :-/ )

C'est étrange tout de même ...

Comme je devais filtrer le data frame résultant après les merge, je vais faire le contraire, filtrer d'abord et merge après.

Mais tout de même, s'il y a kkchose qui saute aux yeux de kkun dans mon code qui expliquerait le pourquoi du comment je serais preneur.

Merci d'avoir lu jusqu'ici.
@+
DS

Dominique Soudant
Messages : 758
Enregistré le : 23 Avr 2008, 11:12
Contact :

Re: Bug ?

Messagepar Dominique Soudant » 02 Fév 2018, 14:21

Han !

J'ai trouvé ... Je me crève les yeux depuis hier sur ce truc. Avec le premier code de debogage on est à l'insertion du 797ième data frame mais avec le second debogage on en est au 855-293=562ième !

Je pensais ne pas avoir de duplicats dans les DF mais ce n'est pas le cas !

Désolé du dérangement
@+
DS

EDIT : en même temps c'est parce que j'ai écrit mon post que j'ai retenu le n° de data frame "mergé" que je me suis rendu compte qu'au premier point d'arrêt c'était pas le même. Des vertus du forum à son insu (de son plein gré) ...


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité