Je travaille sur une plateforme de calcul et d’analyse codée en R avec une interface tcltk (projet PAMPA). J’ai besoin d’optimiser le temps de calcul de mes fonctions de bootstrap.
Pour l’instant cela a été codé sans utiliser la fonction boot avec une boucle contenant un sample, quelques fonctions pour reconstruire un tableau issu de la sélection du sample et des fonctions spécifiques pour les calculs d’extrapolation voulus.
A priori c’est la partie de reconstruction du tableau bootstrapé qui prend trop de temps (évaluation avec Rprof).
J’ai deux possibilités soit je réécris toutes les fonctions spécifiques pour pouvoir utiliser le package boot et espérer gagner du temps, soit j’essaye de trouver une façon plus rapide de reconstruire mon tableau.
Voici le morceau de code qui pose problème.
Il permet de tirer au hasard des numéro de sortie en fonction d’un type de jour (semaine, week end) et d’un niveau temporel (mois, année…). Une fois les numéros de sortie tirés, les paquets de lignes correspondant à ce tirage sont récupérés, un code unique leur est attribué et le tableau bootstrapé est reconstruit.
Code : Tout sélectionner
TirageSortie <- unlist(tapply(FreqAnneeChoisie$numSortie,
paste(FreqAnneeChoisie[, niveauTemporel], FreqAnneeChoisie$typeJsimp),
FUN=function(x){sample(unique(x), replace=T, size=length(unique(x)))}))
tirage <- lapply(TirageSortie, FUN = function(x) {subset(FreqAnneeChoisie,
FreqAnneeChoisie$numSortie==x)})
names(tirage) <- seq(1,length(tirage))
num <- unlist(lapply(names(tirage),
FUN=function(x){tirage[[x]]$num <- rep(x,nrow(tirage[[x]])) ;
tirage[[x]]$numBoot<-paste(tirage[[x]]$numSortie,tirage[[x]]$num)}))
freqEchant <- do.call("rbind",tirage)
Je me demande si j’ai intérêt à utiliser un array, mon souci étant que les paquets de lignes à combiner sont de tailles variables et que je vais avoir besoin d’utiliser un merge qui prend du temps aussi je crois.
Est ce que quelqu’un a un avis sur la question ?
Merci pour votre aide
Claire