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)
}
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]>
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
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
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
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