Transformation en boucle

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

Eric Vitalo
Messages : 4
Enregistré le : 08 Juil 2022, 08:29

Transformation en boucle

Messagepar Eric Vitalo » 19 Juil 2022, 14:31

Bonjour,

De quelle manière pourrais-je transformer le code ci-dessous en une boucle par exemple pour 1000 itérations ?

Code : Tout sélectionner

x <- c(1.1,2.1,3.1,4.1,5.1,6.1,7.1,8.1,1.2,2.2,3.2,4.2,5.2,6.2,7.2,8.2,1.3,2.3,3.3,4.3,5.3,6.3,7.3,8.3)

tab_list_1 <- list(sample(x,8))
tabdir_1<-do.call(rbind,tab_list_1)

tab_list_2 <- list(sample(x,8))
tabdir_2<-do.call(rbind,tab_list_2)

tab_list_... <- list(sample(x,8))
tabdir_...<-do.call(rbind,tab_list_...)

df <- rbind(tabdir_1,tabdir_2,tabdir_...)


Merci d'avance !

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Transformation en boucle

Messagepar Pierre-Yves Berrard » 19 Juil 2022, 16:54

Bonjour,

Pas besoin d'une boucle ici :

Code : Tout sélectionner

replicate(1000, sample(x, 8))

Restera juste à transposer le résultat avec la fonction t().
PY

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Transformation en boucle

Messagepar Mickael Canouil » 22 Juil 2022, 07:50

Bonjour,

petite note, "do.call(rbind, ...)" n'est pas l'outils le plus adapté et le plus explicite si vous voulez transformer un vecteur en matrice dans votre exemple.

Code : Tout sélectionner

matrix(sample(x, 8), nrow = 1)
# or
t(sample(x, 8)) # moins explicite et moins performane que celle ci-dessus  

Il y a une différence de performance en faveur de la commande "matrix" ci-dessus, même pour ce cas très simple elle est minime.

Pour compléter la réponse de Pierre-Yves, il y a une seconde approche très comparable en terme de performance ici, mais selon la complexité de l'élément répété, l'une ou l'autre sera à privilégier.

Code : Tout sélectionner

t(replicate(1000, sample(x, 8)))
# or
do.call("rbind", replicate(1000, sample(x, 8), simplify = FALSE)) 


Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

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

cron