Een gids voor apply(), lapply(), sapply() en tapply() in r


In deze tutorial worden de verschillen uitgelegd tussen de ingebouwde R-functies apply() , sapply() , lapply() en tapply() samen met voorbeelden van wanneer en hoe u elke functie kunt gebruiken.

toepassen()

Gebruik de functie apply() als u een functie wilt toepassen op de rijen of kolommen van een matrix of dataframe.

De basissyntaxis van de functie apply() is:

toepassen (X, MARGE, FUN)

  • X is de naam van de array of het datablok
  • MARGIN geeft aan op welke dimensie een bewerking moet worden uitgevoerd (1 = rij, 2 = kolom)
  • FUN is de specifieke bewerking die u wilt uitvoeren (bijvoorbeeld min, max, som, gemiddelde, etc.)

De volgende code demonstreert verschillende voorbeelden van apply() in actie.

 #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 

toepassen()

Gebruik de functie lapply() wanneer u een functie wilt toepassen op elk element van een lijst, vector of dataframe en als resultaat een lijst wilt krijgen.

De basissyntaxis van de functie lapply() is:

lapply(X, FUN)

  • X is de naam van de lijst, vector of dataframe
  • FUN is de specifieke handeling die u wilt uitvoeren

De volgende code demonstreert verschillende voorbeelden van het gebruik van lapply() op kolommen in een dataframe.

 #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

We kunnen lapply() ook gebruiken om bewerkingen op lijsten uit te voeren. De volgende voorbeelden laten zien hoe u dit kunt doen.

 #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

toepassen()

Gebruik de functie sapply() wanneer u een functie wilt toepassen op elk element van een lijst, vector of dataframe en zo een vector wilt verkrijgen in plaats van een lijst.

De basissyntaxis van de functie sapply() is:

toepassen (X, FUN)

  • X is de naam van de lijst, vector of dataframe
  • FUN is de specifieke handeling die u wilt uitvoeren

De volgende code demonstreert verschillende voorbeelden van het gebruik van sapply() op kolommen in een dataframe.

 #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

We kunnen ook sapply() gebruiken om bewerkingen op lijsten uit te voeren. De volgende voorbeelden laten zien hoe u dit kunt doen.

 #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

kraan()

Gebruik de functie tapply() wanneer u een functie wilt toepassen op subsets van een vector en de subsets worden gedefinieerd door een andere vector, meestal een factor.

De basissyntaxis van de functie tapply() is:

tik op(X, INDEX, FUN)

  • X is de naam van het object, meestal een vector
  • INDEX is een lijst met een of meer factoren
  • FUN is de specifieke handeling die u wilt uitvoeren

De volgende code toont een voorbeeld van het gebruik van tapply() op de in iris ingebedde R-gegevensset .

 #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 

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert