Evaluating Functions with apply, sapply and lapply

apply and sapply

The apply function is used for applying functions to the rows or columns of matrices or dataframes. For example:

(X<-matrix(1:24,nrow=4))

       [,1]     [,2]     [,3]     [,4]     [,5]     [,6]
[1,]      1        5        9       13       17       21
[2,]      2        6       10       14       18       22
[3,]      3        7       11       15       19       23
[4,]      4        8       12       16       20       24

Note that placing the expression to be evaluated in parentheses (as above) causes the value of the result to be printed on the screen. This saves an extra line of code, because to achieve the same result without parentheses requires us to type

X<-matrix(1:24,nrow=4)
X

Often you want to apply a function across one of the margins of a matrix – margin 1 being the rows and margin 2 the columns. Here are the row totals (four of them):

apply(X,1,sum)

[1]  66  72  78  84

and here are the column totals (six of them):

apply(X,2,sum)

[1]  10  26  42  58  74  90

Note that in both cases, the answer produced by apply is a vector rather than a matrix. You can apply functions to the individual elements of the matrix rather than to the margins. The margin you specify influences only the shape of the resulting matrix.

apply(X,1,sqrt)

          [,1]      [,2]      [,3]         [,4]
[1,]  1.000000  1.414214  1.732051     2.000000
[2,]  2.236068  2.449490  2.645751     2.828427
[3,]  3.000000  3.162278  3.316625     3.464102
[4,]  3.605551  3.741657  3.872983     4.000000
[5,]  4.123106  4.242641  4.358899     4.472136
[6,]  4.582576  4.690416  4.795832     4.898979

apply(X,2,sqrt) [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1.000000 2.236068 3.000000 3.605551 4.123106 ...

Get The R Book now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.