Applied Functions

Students cheer on the Redhawks during a sporting event at Miami University.

The apply() function (and related variants lapply(), sapply(), and vapply()) are designed to perform a given task across a series or subset of elements from a larger whole. The two common arguments for any of these functions are X = and FUN = for indicating the object to act upon and the actual action to take, respectively. Below, we illustrate these basic arguments when using either apply() or lapply().

apply()

# define an example matrix
M <- matrix(c(0, 5, 2, 5, 1, 9, 8, 0), nrow=2)
M

##      [,1] [,2] [,3] [,4]
## [1,]    0    2    1    8
## [2,]    5    5    9    0
# Take the mean of each row
apply(X = M, MARGIN = 1, FUN = mean)

## [1] 2.75 4.75
# Same, except for columns and using argument order instead of specifying explicitly
apply(M, 2, mean)

## [1] 2.5 3.5 5.0 4.0

# Defining custom function since 'mean(x) + 1' is not a part of base R
apply(M, 2, function(x) mean(x) + 1)

## [1] 3.5 4.5 6.0 5.0
# Extracting values > 3 by row
apply(M, 1, function(x) x[x>3])

## [[1]]
## [1] 8

## [[2]]
## [1] 5 5 9

Notice that the last the line of code resulted in a list object. This is because the result from `apply()` for each row of the matrix M is comprised of a different number of elements.

lapply()

Now, we'll look at lapply() which is referred to as 'L'-apply since it's an apply function for list objects; however, lapply() not only returns a list object automatically but also allows the user to apply a function to a list object.

The object and function arguments in lapply() serve the same purpose as in apply(); however, notice that lapply() doesn't require a MARGIN = argument. This is because lists are operated on element by element. In other words, think of lists as having only a single dimension and therefore do not require a dimension be specified.

# Define an example list of elements
x1 <- c(1, 9, 7, 9)
x2 <- c(8, 0, 5)
exampleList <- list(x1, x2)
exampleList

## [[1]]
## [1] 1 9 7 9

## [[2]]
## [1] 8 0 5

lapply(exampleList, mean)

## [[1]]
## [1] 6.5
## 
## [[2]]
## [1] 4.333333

For information concerning additional arguments that can be used with the apply family of functions, including sapply() and vapply(), please refer to the R Help documentation.

Need a Refresher?

Go back to the beginner tutorials.