O'Reilly logo

The R Book by Michael J. Crawley

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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 ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required