library(plyr)

Es un conjunto de herramientas para manipulación de datos. Calculo de de la media de cada variable entre especies de iris.

mean.iris.loop <- NULL
   for(species in unique(iris$Species))
   {
     iris_sub <- iris[iris$Species==species,]
     column_means <- colMeans(iris_sub[,-5])
     mean.iris.loop <- rbind(mean.iris.loop,column_means)
   }
   rownames(mean.iris.loop) <- unique(iris$Species)

Cálculo con plyr

library (plyr)
ddply(iris,~Species,function(x) colMeans(x[,-which(colnames(x)=="Species")]))
mean.iris.loop
##            Sepal.Length Sepal.Width Petal.Length Petal.Width
## setosa            5.006       3.428        1.462       0.246
## versicolor        5.936       2.770        4.260       1.326
## virginica         6.588       2.974        5.552       2.026

Calculo de la media de cada especie

# Calculate column mean for each species and output will be data
frame
## function () 
## {
##     for (fun in getHook("before.plot.new")) {
##         if (is.character(fun)) 
##             fun <- get(fun)
##         try(fun())
##     }
##     .External2(C_plot_new)
##     grDevices:::recordPalette()
##     for (fun in getHook("plot.new")) {
##         if (is.character(fun)) 
##             fun <- get(fun)
##         try(fun())
##     }
##     invisible()
## }
## <bytecode: 0x7fe1eec45ee0>
## <environment: namespace:graphics>
iris_mean <- adply(iris3,3,colMeans)
class(iris_mean)
## [1] "data.frame"
# Now calculate mean again with output as list
iris_mean <- alply(iris3,3,colMeans)
class(iris_mean)
## [1] "list"
iris_mean
## $`1`
## Sepal L. Sepal W. Petal L. Petal W. 
##    5.006    3.428    1.462    0.246 
## 
## $`2`
## Sepal L. Sepal W. Petal L. Petal W. 
##    5.936    2.770    4.260    1.326 
## 
## $`3`
## Sepal L. Sepal W. Petal L. Petal W. 
##    6.588    2.974    5.552    2.026 
## 
## attr(,"split_type")
## [1] "array"
## attr(,"split_labels")
##           X1
## 1     Setosa
## 2 Versicolor
## 3  Virginica