В этом руководстве объясняются различия между встроенными функциями R apply() , sapply() , lapply() и tapply() , а также примеры того, когда и как использовать каждую функцию.
подать заявление()
Используйте функцию apply() , если вы хотите применить функцию к строкам или столбцам матрицы или фрейма данных.
Основной синтаксис функции apply() следующий:
применить(X, MARGIN, FUN)
- X — имя матрицы или фрейма данных
- MARGIN указывает, в каком измерении выполнять операцию (1 = строка, 2 = столбец).
- FUN — это конкретная операция, которую вы хотите выполнить (например, минимум, максимум, сумма, среднее и т. д.).
Следующий код иллюстрирует несколько примеров применения apply() в действии.
#create a data frame with three columns and five rows
data <- data.frame(a = c(1, 3, 7, 12, 9),
b = c(4, 4, 6, 7, 8),
c = c(14, 15, 11, 10, 6))
data
# a b c
#1 1 4 14
#2 3 4 15
#3 7 6 11
#4 12 7 10
#5 9 8 6
#find the sum of each row
apply(data, 1, sum)
#[1] 19 22 24 29 23
#find the sum of each column
apply(data, 2, sum)
# a b c
#32 29 56
#find the mean of each row
apply(data, 1, mean)
#[1] 6.333333 7.333333 8.000000 9.666667 7.666667
#find the mean of each column, rounded to one decimal place
round(apply(data, 2, mean), 1)
# a b c
#6.4 5.8 11.2
#find the standard deviation of each row
apply(data, 1, sd)
#[1] 6.806859 6.658328 2.645751 2.516611 1.527525
#find the standard deviation of each column
apply(data, 2, sd)
# a b c
#4.449719 1.788854 3.563706
лапли()
Используйте функцию lapply() , когда вы хотите применить функцию к каждому элементу списка, вектора или фрейма данных и получить в результате список.
Основной синтаксис функции lapply() следующий:
сладенький(X, FUN)
- X — имя списка, вектора или фрейма данных.
- FUN - это конкретная операция, которую вы хотите выполнить
Следующий код иллюстрирует несколько примеров использования lapply() для столбцов фрейма данных.
#create a data frame with three columns and five rows
data <- data.frame(a = c(1, 3, 7, 12, 9),
b = c(4, 4, 6, 7, 8),
c = c(14, 15, 11, 10, 6))
data
# a b c
#1 1 4 14
#2 3 4 15
#3 7 6 11
#4 12 7 10
#5 9 8 6
#find mean of each column and return results as a list
lapply(data, mean)
# $a
# [1] 6.4
#
# $b
# [1] 5.8
#
# $c
# [1] 11.2
#multiply values in each column by 2 and return results as a list
lapply(data, function(data) data\*2)
# $a
# [1] 2 6 14 24 18
#
# $b
# [1] 8 8 12 14 16
#
# $c
# [1] 28 30 22 20 12
Мы также можем использовать lapply() для выполнения операций над списками. В следующих примерах показано, как это сделать.
#create a list
x <- list(a=1, b=1:5, c=1:10)
x
# $a
# [1] 1
#
# $b
# [1] 1 2 3 4 5
#
# $c
# [1] 1 2 3 4 5 6 7 8 9 10
#find the sum of each element in the list
lapply(x, sum)
# $a
# [1] 1
#
# $b
# [1] 15
#
# $c
# [1] 55
#find the mean of each element in the list
lapply(x, mean)
# $a
# [1] 1
#
# $b
# [1] 3
#
# $c
# [1] 5.5
#multiply values of each element by 5 and return results as a list
lapply(x, function(x) x\*5)
# $a
# [1] 5
#
# $b
# [1] 5 10 15 20 25
#
# $c
# [1] 5 10 15 20 25 30 35 40 45 50
сочный ()
Используйте функцию sapply() , когда вы хотите применить функцию к каждому элементу списка, вектора или фрейма данных и в результате получить вектор вместо списка.
Основной синтаксис функции sapply() следующий:
сочный (X, FUN)
- X — имя списка, вектора или фрейма данных.
- FUN - это конкретная операция, которую вы хотите выполнить
Следующий код иллюстрирует несколько примеров использования sapply() для столбцов фрейма данных.
#create a data frame with three columns and five rows
data <- data.frame(a = c(1, 3, 7, 12, 9),
b = c(4, 4, 6, 7, 8),
c = c(14, 15, 11, 10, 6))
data
# a b c
#1 1 4 14
#2 3 4 15
#3 7 6 11
#4 12 7 10
#5 9 8 6
#find mean of each column and return results as a vector
sapply(data, mean)
# a b c
#6.4 5.8 11.2
#multiply values in each column by 2 and return results as a matrix
sapply(data, function(data) data\*2)
# a b c
#[1,] 2 8 28
#[2,] 6 8 30
#[3,] 14 12 22
#[4,] 24 14 20
#[5,] 18 16 12
Мы также можем использовать sapply() для выполнения операций над списками. В следующих примерах показано, как это сделать.
#create a list
x <- list(a=1, b=1:5, c=1:10)
x
# $a
# [1] 1
#
# $b
# [1] 1 2 3 4 5
#
# $c
# [1] 1 2 3 4 5 6 7 8 9 10
#find the sum of each element in the list
sapply(x, sum)
# a b c
# 1 15 55
#find the mean of each element in the list
sapply(x, mean)
# a b c
#1.0 3.0 5.5
постукивать()
Используйте функцию tapply() , когда вы хотите применить функцию к подмножествам вектора, и подмножества определяются каким-либо другим вектором, обычно фактором.
Основной синтаксис функции tapply() следующий:
постукивать(X, ИНДЕКС, ВЕСЕЛЬЕ)
- X — имя объекта, обычно вектор
- ИНДЕКС — это список из одного или нескольких факторов
- FUN - это конкретная операция, которую вы хотите выполнить
Следующий код иллюстрирует пример использования tapply() для встроенного набора данных R iris .
#view first six lines of *iris* dataset
head(iris)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
#6 5.4 3.9 1.7 0.4 setosa
#find the max Sepal.Length of each of the three Species
tapply(iris$Sepal.Length, iris$Species, max)
#setosa versicolor virginica
# 5.8 7.0 7.9
#find the mean Sepal.Width of each of the three Species
tapply(iris$Sepal.Width, iris$Species, mean)
# setosa versicolor virginica
# 3.428 2.770 2.974
#find the minimum Petal.Width of each of the three Species
tapply(iris$Petal.Width, iris$Species, min)
# setosa versicolor virginica
# 0.1 1.0 1.4