La fonction « by » est très intéressante pour éviter des boucles « for » et ainsi optimiser le code

data(iris)
summary(iris)
by(iris[,-5],iris[,5],mean)
 

ou encore quant vous voulez effectuer une fonction qui n’est pas définie.


by(iris[,-5],iris[,5],function(ob){
#mettez ici l'opération que vous voulez faire sur le subset
return()
})
 

Le problème peut être que by retourne une liste et que l’on voudrait avoir un tableau de données. C’est ce que fait la fonction do.call, elle prend une liste et effectue une action dessus (ici rbind).



data(iris)
summary(iris)
do.call(rbind,by(iris[,-5],iris[,5],mean) )