There are lots of apply functions in R (apply, lapply, sapply etc) and they are used instead of loops. I find tapply particularly useful, it applies a function such as sum, mean or length to a subset of a table

There are three components, tapply(1, 2, 3) where

- the vector of data you want to apply the function to
- the way to break the data up (this can be a single variable or a list of them
- the function (such as length or mean) that you wish to apply to the data

#load up some data

data(iris)

#example – obtain mean petal length per species

tapply(iris$Petal.Length, iris$Species, mean)

#Find the mean petal length for each species where the petal width is 1.4

tapply(iris$Petal.Length[iris$Petal.Width == 1.4], iris$Species[iris$Petal.Width == 1.4], mean, na.rm=TRUE)

#If you have problems with this check the two vectors are the same length

length(iris$Petal.Length[iris$Petal.Width == 1.4])

length(iris$Species[iris$Petal.Width == 1.4])

# example – I can find the average of two different subsets of the data by using a list

tapply(mtcars$mpg, list(mtcars$cyl, mtcars$am), mean)

#Other useful sources

https://www.r-bloggers.com/r-function-of-the-day-tapply-2/

https://stat.ethz.ch/R-manual/R-devel/library/base/html/tapply.html