HOWTO · R
replicate() fonction dans R
Ce tutoriel présente l'utilisation de la fonction de replicate() dans R
Sur cette page
En R, replicate() évalue plusieurs fois une expression et rassemble chaque résultat. Cette fonction est utile lorsqu’un même calcul, tirage aléatoire ou simulation doit être exécuté à plusieurs reprises. Le résultat de l’expression et l’argument simplify déterminent si les valeurs recueillies forment un vecteur, une matrice, un tableau ou une liste.
Ce que répète replicate()
Le premier argument, n, indique le nombre d’évaluations. Le deuxième, expr, est évalué une fois par répétition. Par exemple, le code suivant renvoie cinq copies de la valeur scalaire 1 :
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
result <- replicate(5, 1)
print(result)
Le vecteur renvoyé contient une valeur pour chaque évaluation. Si expr utilise des nombres aléatoires, chaque évaluation peut produire une valeur différente ; replicate() rassemble ces résultats sans les rendre identiques.
Syntaxe et argument simplify
La forme générale est replicate(n, expr, simplify = "array"). Ici, n est le nombre de répétitions, expr l’expression à évaluer et simplify contrôle la simplification des résultats recueillis par R. La valeur par défaut, "array", permet de simplifier les résultats selon leur forme : des résultats scalaires peuvent former un vecteur, des vecteurs de même longueur peuvent former une matrice et des résultats de dimension supérieure peuvent former un tableau. Utilisez simplify = FALSE pour conserver une liste, par exemple lorsque chaque répétition renvoie un résultat qui doit rester un objet distinct.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
values <- replicate(3, c("red", "blue"), simplify = FALSE)
print(typeof(values))
print(length(values))
[1] "list"
[1] 3
typeof() indique le type sous-jacent et length() compte les éléments de la liste.
Répéter un scalaire ou un vecteur
Une expression scalaire produit un résultat par répétition. Si l’expression renvoie chaque fois un vecteur de même longueur, replicate() place chaque vecteur dans une colonne d’une matrice. Les lignes correspondent alors aux positions dans le vecteur, et les colonnes aux répétitions.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
result <- replicate(3, seq(1, 4))
print(result)
La même méthode convient à un calcul qui renvoie un vecteur de longueur fixe. Si la longueur des résultats varie, les valeurs ne peuvent pas former une matrice régulière ; définissez simplify = FALSE pour conserver chaque résultat dans un élément de liste.
Utiliser replicate() avec une boucle for()
Une boucle for() peut construire une valeur qui deviendra le résultat de chaque répétition. Initialisez et remplissez un vecteur dans l’expression, puis faites de ce vecteur la dernière valeur de l’expression :
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
result <- replicate(2, {
values <- numeric(4)
for (i in seq_len(4)) {
values[i] <- i * 2
}
values
})
print(result)
La dernière expression est values : chaque évaluation renvoie donc le vecteur rempli, et le résultat simplifié comporte une colonne par répétition. Une boucle for() renvoie elle-même NULL ; afficher des valeurs dans la boucle ne les transforme pas en valeur de retour. Si l’expression répétée se compose uniquement d’une telle boucle, chaque répétition renvoie NULL. Pour récupérer les valeurs dans le résultat, stockez-les puis renvoyez l’objet qui les contient.
Répéter des simulations aléatoires
Les expressions aléatoires sont réévaluées à chaque répétition. Par exemple, rnorm(4) tire quatre valeurs d’une loi normale standard. La matrice obtenue comporte une colonne par tirage de quatre valeurs ; les nombres échantillonnés varient d’une exécution à l’autre et ne doivent donc pas être considérés comme des résultats fixes.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
set.seed(42)
draws <- replicate(3, rnorm(4))
print(dim(draws))
Il est également possible de répéter une fonction de simulation. Définissez-la pour qu’elle renvoie la statistique ou la mesure qui vous intéresse, puis transmettez un appel à cette fonction comme expr. Par exemple, une fonction qui tire une valeur avec runif(1) peut être évaluée de nombreuses fois afin d’étudier la distribution des valeurs simulées. Choisissez et notez une graine lorsque vous avez besoin d’une séquence aléatoire reproductible ; sans graine fixe, les valeurs diffèrent généralement d’une exécution à l’autre.
Rééchantillonnage bootstrap avec replicate()
Le rééchantillonnage bootstrap estime l’incertitude en tirant, avec remise, des échantillons à partir des données observées. À chaque répétition, sample() crée un jeu de données rééchantillonné. Lorsque chaque échantillon a la même taille que les données d’origine, le résultat simplifié est une matrice dont les colonnes correspondent aux répétitions bootstrap.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
original_data <- c(2, 4, 6, 8, 10)
set.seed(42)
resamples <- replicate(5, sample(original_data, replace = TRUE))
print(dim(resamples))
Chaque colonne représente un jeu de données rééchantillonné ; certaines valeurs peuvent apparaître plusieurs fois puisque le tirage se fait avec remise. Pour appliquer le bootstrap à une statistique plutôt que de conserver toutes les valeurs échantillonnées, calculez cette statistique dans l’expression répétée, par exemple mean(sample(original_data, replace = TRUE)). On obtient ainsi une statistique par répétition, généralement rassemblée dans un vecteur.