When you have time and memory constraints, the function apply
is often more useful than a loop. Consider the iris
data set
(included with S-PLUS) which consists of 50 observations of four
characteristics of three types of iris. To find the mean observation
for each characteristic, one possibility is:
> get.iris.mean <- function(x) + { + report <- rep(0,4) + for(i in 1:4) + report[i] <- mean(iris[,i,]) + report + } > get.iris.mean(iris) [1] 5.843333 3.057333 3.758000 1.199333A cleaner way, which does not involve any looping, is:
> apply(iris, 2, mean) Sepal L. Sepal W. Petal L. Petal W. 5.843333 3.057333 3.758 1.199333The above says ``with the matrix
iris
, along margin 2 apply
the function mean''.
To find the mean for each characteristic (margin 2) for each type of iris, use:
> apply(iris, c(2,3), mean) Setosa Versicolor Virginica Sepal L. 5.006 5.936 6.588 Sepal W. 3.428 2.770 2.974 Petal L. 1.462 4.260 5.552 Petal W. 0.246 1.326 2.026