Load Required packages

library(tidyverse)
library(datasets)

Load iris dataset

data(iris)

head(iris, 3)
tapply()

The object called ‘iris’ will be in the workspace. In this dataset, what is the mean of ‘Sepal.Width’ for the species setosa?

tapply(iris$Sepal.Width, iris$Species, mean)
    setosa versicolor  virginica 
     3.428      2.770      2.974 
Alternative method
iris %>%
  filter(Species == 'setosa') %>%
  group_by(species = Species) %>%
  summarise(avg_sepal_width = mean(Sepal.Width))
lapply()

Return a list of the means of the variables ‘Sepal.Length’, ‘Sepal.Width’, ‘Petal.Length’, and ‘Petal.Width’?

lapply(iris[, -5], mean)
$Sepal.Length
[1] 5.843333

$Sepal.Width
[1] 3.057333

$Petal.Length
[1] 3.758

$Petal.Width
[1] 1.199333
sapply()

Return a vector of the means of the variables ‘Sepal.Length’, ‘Sepal.Width’, ‘Petal.Length’, and ‘Petal.Width’?

sapply(iris[, -5], mean)
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
    5.843333     3.057333     3.758000     1.199333 
sapply(iris[, 1:4], mean)
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
    5.843333     3.057333     3.758000     1.199333 
apply()

Use apply() to find the means of the variables ‘Sepal.Length’, ‘Sepal.Width’, ‘Petal.Length’, and ‘Petal.Width’?

apply(iris[,1:4], 2, mean) #2 indicates columns
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
    5.843333     3.057333     3.758000     1.199333 

NOTE

RowMeans, ColMeans, RowSums, ColSums are preferred functions since they have been optimized for the tasks.

colMeans(iris[1:4])
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
    5.843333     3.057333     3.758000     1.199333 

Load mtcars

data(mtcars)
head(mtcars,2)

sapply()-Split() combination, tapply()

Calculate the average weight (wt) by number of cylinders in the car (cyl)?

split()-sapply() combination
split(mtcars$wt, mtcars$cyl)
$`4`
 [1] 2.320 3.190 3.150 2.200 1.615 1.835 2.465 1.935 2.140 1.513 2.780

$`6`
[1] 2.620 2.875 3.215 3.460 3.440 3.440 2.770

$`8`
 [1] 3.440 3.570 4.070 3.730 3.780 5.250 5.424 5.345 3.520 3.435 3.840 3.845 3.170 3.570
sapply(split(mtcars$wt, mtcars$cyl), mean)
       4        6        8 
2.285727 3.117143 3.999214 

tapply yields the same result above with the sapply-split combination

tapply(mtcars$wt, mtcars$cyl, mean)
       4        6        8 
2.285727 3.117143 3.999214 
with(mtcars, tapply(wt, cyl, mean))
       4        6        8 
2.285727 3.117143 3.999214 
Alternative Approach
mtcars %>%
  group_by(cyl) %>%
  summarise(avg_wt = mean(wt))
LS0tDQp0aXRsZTogIlVzaW5nIGFwcGx5KCksIHRhcHBseSgpLCBzYXBwbHkoKSwgbGFwcGx5KCkiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIyMjIExvYWQgUmVxdWlyZWQgcGFja2FnZXMNCmBgYHtyIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZGF0YXNldHMpDQpgYGANCg0KDQojIyMjIExvYWQgYGlyaXNgIGRhdGFzZXQNCg0KYGBge3J9DQpkYXRhKGlyaXMpDQoNCmBgYA0KDQpgYGB7cn0NCg0KaGVhZChpcmlzLCAzKQ0KYGBgDQoNCg0KIyMjIyMgKip0YXBwbHkoKSoqDQoNClRoZSBvYmplY3QgY2FsbGVkICdpcmlzJyB3aWxsIGJlIGluIHRoZSB3b3Jrc3BhY2UuIEluIHRoaXMgZGF0YXNldCwgd2hhdCBpcyB0aGUgbWVhbiBvZiAnU2VwYWwuV2lkdGgnIGZvciB0aGUgc3BlY2llcyBzZXRvc2E/IA0KDQpgYGB7cn0NCnRhcHBseShpcmlzJFNlcGFsLldpZHRoLCBpcmlzJFNwZWNpZXMsIG1lYW4pDQoNCmBgYA0KIyMjIyMgQWx0ZXJuYXRpdmUgbWV0aG9kDQoNCmBgYHtyfQ0KaXJpcyAlPiUNCiAgZmlsdGVyKFNwZWNpZXMgPT0gJ3NldG9zYScpICU+JQ0KICBncm91cF9ieShzcGVjaWVzID0gU3BlY2llcykgJT4lDQogIHN1bW1hcmlzZShhdmdfc2VwYWxfd2lkdGggPSBtZWFuKFNlcGFsLldpZHRoKSkNCmBgYA0KDQoNCiMjIyMjICoqbGFwcGx5KCkqKg0KDQpSZXR1cm4gYSAqKmxpc3QqKiBvZiB0aGUgbWVhbnMgb2YgdGhlIHZhcmlhYmxlcyAnU2VwYWwuTGVuZ3RoJywgJ1NlcGFsLldpZHRoJywgJ1BldGFsLkxlbmd0aCcsIGFuZCAnUGV0YWwuV2lkdGgnPw0KDQpgYGB7cn0NCmxhcHBseShpcmlzWywgLTVdLCBtZWFuKQ0KDQpgYGANCiMjIyMjICoqc2FwcGx5KCkqKg0KDQoNClJldHVybiBhICoqdmVjdG9yKiogb2YgdGhlIG1lYW5zIG9mIHRoZSB2YXJpYWJsZXMgJ1NlcGFsLkxlbmd0aCcsICdTZXBhbC5XaWR0aCcsICdQZXRhbC5MZW5ndGgnLCBhbmQgJ1BldGFsLldpZHRoJz8NCg0KYGBge3J9DQpzYXBwbHkoaXJpc1ssIC01XSwgbWVhbikNCg0KYGBgDQoNCmBgYHtyfQ0Kc2FwcGx5KGlyaXNbLCAxOjRdLCBtZWFuKQ0KYGBgDQoNCiMjIyMjICoqYXBwbHkoKSoqDQoNCg0KVXNlICphcHBseSgpKiB0byBmaW5kIHRoZSBtZWFucyBvZiB0aGUgdmFyaWFibGVzICdTZXBhbC5MZW5ndGgnLCAnU2VwYWwuV2lkdGgnLCAnUGV0YWwuTGVuZ3RoJywgYW5kICdQZXRhbC5XaWR0aCc/DQoNCg0KYGBge3J9DQphcHBseShpcmlzWywxOjRdLCAyLCBtZWFuKSAjMiBpbmRpY2F0ZXMgY29sdW1ucw0KYGBgDQoNCioqTk9URSoqDQoNCioqUm93TWVhbnMsIENvbE1lYW5zLCBSb3dTdW1zLCBDb2xTdW1zKiogYXJlIHByZWZlcnJlZCBmdW5jdGlvbnMgc2luY2UgdGhleSBoYXZlIGJlZW4gb3B0aW1pemVkIGZvciB0aGUgdGFza3MuDQpgYGB7cn0NCmNvbE1lYW5zKGlyaXNbMTo0XSkNCmBgYA0KDQojIyMjICoqTG9hZCBtdGNhcnMqKg0KYGBge3J9DQpkYXRhKG10Y2FycykNCmBgYA0KDQpgYGB7cn0NCmhlYWQobXRjYXJzLDIpDQpgYGANCg0KIyMjIyAqKnNhcHBseSgpLVNwbGl0KCkgY29tYmluYXRpb24sIHRhcHBseSgpICoqDQoNCkNhbGN1bGF0ZSB0aGUgYXZlcmFnZSB3ZWlnaHQgKHd0KSBieSBudW1iZXIgb2YgY3lsaW5kZXJzIGluIHRoZSBjYXIgKGN5bCk/IA0KDQojIyMjIyMgKipzcGxpdCgpLXNhcHBseSgpIGNvbWJpbmF0aW9uKioNCmBgYHtyfQ0Kc3BsaXQobXRjYXJzJHd0LCBtdGNhcnMkY3lsKQ0KDQpgYGANCg0KDQpgYGB7cn0NCnNhcHBseShzcGxpdChtdGNhcnMkd3QsIG10Y2FycyRjeWwpLCBtZWFuKQ0KYGBgDQoNCioqdGFwcGx5IHlpZWxkcyB0aGUgc2FtZSByZXN1bHQgYWJvdmUgd2l0aCB0aGUgc2FwcGx5LXNwbGl0IGNvbWJpbmF0aW9uKiogDQoNCmBgYHtyfQ0KdGFwcGx5KG10Y2FycyR3dCwgbXRjYXJzJGN5bCwgbWVhbikNCg0KYGBgDQoNCmBgYHtyfQ0Kd2l0aChtdGNhcnMsIHRhcHBseSh3dCwgY3lsLCBtZWFuKSkNCmBgYA0KIyMjIyMgQWx0ZXJuYXRpdmUgQXBwcm9hY2gNCmBgYHtyfQ0KbXRjYXJzICU+JQ0KICBncm91cF9ieShjeWwpICU+JQ0KICBzdW1tYXJpc2UoYXZnX3d0ID0gbWVhbih3dCkpDQpgYGANCg0KDQoNCg==