Руководство по apply(), lapply(), sapply() и tapply() в R


В этом руководстве объясняются различия между встроенными функциями 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
Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.