How to Use the replicate() Function in R (With Examples)


You can use the replicate() function to repeatedly evaluate some expression in R a certain number of times.

This function uses the following basic syntax:

replicate(n, expr)

where:

  • n: The number of times to repeatedly evaluate some expression.
  • expr: The expression to evaluate.

The following examples show how to use this function in practice.

Example 1: Replicate a Value Multiple Times

The following code shows how to use the replicate() function to repeatedly evaluate a single value multiple times:

#replicate the value 3 exactly 10 times
replicate(n=10, 3)

[1] 3 3 3 3 3 3 3 3 3 3

#replicate the letter 'A' exactly 7 times
replicate(n=7, 'A')

[1] "A" "A" "A" "A" "A" "A" "A"

#replicate FALSE exactly 5 times
replicate(n=5, FALSE)

[1] FALSE FALSE FALSE FALSE FALSE

Example 2: Replicate a Function Multiple Times

Now suppose we’d like to repeatedly evaluate some function.

For example, suppose we use the rnorm() function to produce three values for a random variable that follows a normal distribution with a mean of 0 and a standard deviation of 1:

#make this example reproducible
set.seed(1)

#generate 3 values that follow normal distribution
rnorm(3, mean=0, sd=1) 

[1] -0.6264538  0.1836433 -0.8356286

Using the replicate() function, we can repeatedly evaluate this rnorm() function a certain number of times.

For example, we can evaluate this function 5 times:

#make this example reproducible
set.seed(1)

#generate 3 values that follow normal distribution (replicate this 4 times)
replicate(n=4, rnorm(3, mean=0, sd=1))

           [,1]      [,2]       [,3]       [,4]
[1,]  1.5952808 0.4874291 -0.3053884 -0.6212406
[2,]  0.3295078 0.7383247  1.5117812 -2.2146999
[3,] -0.8204684 0.5757814  0.3898432  1.1249309

The result is a matrix with 3 rows and 4 columns.

Or perhaps we’d like to evaluate this function 6 times:

#make this example reproducible
set.seed(1)

#generate 3 values that follow normal distribution (replicate this 6 times)
replicate(n=6, rnorm(3, mean=0, sd=1))

           [,1]      [,2]       [,3]       [,4]        [,5]      [,6]
[1,]  1.5952808 0.4874291 -0.3053884 -0.6212406 -0.04493361 0.8212212
[2,]  0.3295078 0.7383247  1.5117812 -2.2146999 -0.01619026 0.5939013
[3,] -0.8204684 0.5757814  0.3898432  1.1249309  0.94383621 0.9189774

The result is a matrix with 6 rows and 3 columns.

Using replicate() to Simulate Data

The replicate() function is particularly useful for running simulations.

For example, suppose we’d like to generate 5 samples of size n = 10 that each follow a normal distribution.

We can use the replicate() function to produce 5 different samples and we can then use the colMeans() function to find the mean value of each sample:

#make this example reproducible
set.seed(1)

#create 5 samples each of size n=10
data <- replicate(n=5, rnorm(10, mean=0, sd=1))

#view samples
data

            [,1]        [,2]        [,3]        [,4]       [,5]
 [1,] -0.6264538  1.51178117  0.91897737  1.35867955 -0.1645236
 [2,]  0.1836433  0.38984324  0.78213630 -0.10278773 -0.2533617
 [3,] -0.8356286 -0.62124058  0.07456498  0.38767161  0.6969634
 [4,]  1.5952808 -2.21469989 -1.98935170 -0.05380504  0.5566632
 [5,]  0.3295078  1.12493092  0.61982575 -1.37705956 -0.6887557
 [6,] -0.8204684 -0.04493361 -0.05612874 -0.41499456 -0.7074952
 [7,]  0.4874291 -0.01619026 -0.15579551 -0.39428995  0.3645820
 [8,]  0.7383247  0.94383621 -1.47075238 -0.05931340  0.7685329
 [9,]  0.5757814  0.82122120 -0.47815006  1.10002537 -0.1123462
[10,] -0.3053884  0.59390132  0.41794156  0.76317575  0.8811077

#calculate mean of each sample
colMeans(data)

[1]  0.1322028  0.2488450 -0.1336732  0.1207302  0.1341367

From the output we can see:

  • The mean of the first sample is 0.1322.
  • The mean of the second sample is 0.2488.
  • The mean of the third sample is -0.1337.

And so on.

Additional Resources

How to Select Specific Columns in R
How to Drop Columns from Data Frame in R
How to Remove Rows from Data Frame Based on Condition in R

Leave a Reply

Your email address will not be published.