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


The mapply() function in R can be used to apply a function to multiple list or vector arguments.

This function uses the following basic syntax:

mapply(FUN, …, MoreArgs = NULL, SIMPLIFY = TRUE, USE.NAMES = TRUE)

where:

  • FUN: The function to apply
  • : Arguments to vectorize over
  • MoreArgs: A list of other arguments to FUN
  • SIMPLIFY: Whether or not to reduce the result to a vector.
  • USE.NAMES: Whether or not to use names if the first … argument has names

The following examples show how to use this function in different scenarios.

Example 1 : Use mapply() to Create a Matrix

The following code shows how to use mapply() to create a matrix by repeating the values c(1, 2, 3) each 5 times:

#create matrix
mapply(rep, 1:3, times=5)

     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    1    2    3
[3,]    1    2    3
[4,]    1    2    3
[5,]    1    2    3

Notice how this is much more efficient than typing out the following:

#create same matrix as previous example
matrix(c(rep(1, 5), rep(2, 5), rep(3, 5)), ncol=3)

     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    1    2    3
[3,]    1    2    3
[4,]    1    2    3
[5,]    1    2    3

Example 2: Use mapply() to Find Max Value of Corresponding Elements in Vectors

The following code shows how to use mapply() to find the max value for corresponding elements in two vectors:

#create two vectors
vector1 <- c(1, 2, 3, 4, 5)
vector2 <- c(2, 4, 1, 2, 10)

#find max value of each corresponding elements in vectors
mapply(max, vector1, vector2)

[1]  2  4  3  4 10

Here’s how to interpret the output:

  • The max value of the elements in position 1 of either vector is 2.
  • The max value of the elements in position 2 of either vector is 4.
  • The max value of the elements in position 3 of either vector is 3.

And so on.

Example 3: Use mapply() to Multiply Corresponding Elements in Vectors

The following code shows how to use mapply() to find multiply the corresponding elements in several vectors:

#create three vectors
vec1 <- c(1, 2, 3, 4)
vec2 <- c(2, 4, 6, 8)
vec3 <- c(3, 6, 9, 12)

#find max value of each corresponding elements in vectors 
mapply(function(val1, val2, val3) val1*val2*val3, vec1, vec2, vec3)

[1]   6  48 162 384

Here’s how to interpret the output:

  • The product of the elements in position 1 of each vector is 1 * 2 * 3 = 6.
  • The product of the elements in position 2 of each vector is 2 * 4 * 6 = 48.
  • The product of the elements in position 3 of each vector is 3 * 6 * 9 = 162.
  • The product of the elements in position 4 of each vector is 4 * 8 * 12 = 384.

Additional Resources

The following tutorials explain how to perform other common operations in R:

lapply vs. sapply in R: What’s the Difference?
How to Apply Function to Each Row in Matrix or Data Frame in R

Leave a Reply

Your email address will not be published.