Посібник із 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

#abc
#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)

#abc
#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)

#abc
#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)

#abc
#4.449719 1.788854 3.563706 

застосовувати()

Використовуйте функцію lapply() , якщо ви хочете застосувати функцію до кожного елемента списку, вектора або кадру даних і отримати в результаті список.

Основний синтаксис функції 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

#abc
#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
apply(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

#abc
#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)

#abc
#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)

#abc
#[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)

#abc
#1 15 55 

#find the mean of each element in the list
sapply(x, mean)

#abc
#1.0 3.0 5.5

торкніться()

Використовуйте функцію tapply() , якщо ви хочете застосувати функцію до підмножин вектора, а підмножини визначаються іншим вектором, зазвичай фактором.

Основний синтаксис функції tapply() такий:

натисніть (X, INDEX, FUN)

  • X — ім’я об’єкта, зазвичай вектора
  • ІНДЕКС — це список одного або кількох факторів
  • FUN — це конкретна операція, яку ви хочете виконати

У наступному коді показано приклад використання tappply() для вбудованого набору даних 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 

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *