R语言 apply()、lapply()、sapply()和tapply()函数
在这篇文章中,我们将学习R编程语言中的apply()、lapply()、sapply()和tapply()函数。
apply()集合是R基本包的一部分。这个函数系列帮助我们将某个函数应用于某个数据框、列表或向量,并根据我们使用的函数将结果以列表或向量的形式返回。在apply()函数家族中,有以下四种类型的函数。
apply()函数
apply()函数让我们将一个函数应用于一个矩阵或数据框的行或列。该函数将矩阵或数据框作为参数,同时接受函数以及是否需要按行或列应用,并以向量或数组或列表的形式返回结果。
语法: apply( x, margin, function )
参数
- x: 决定了输入的数组,包括矩阵。
- margin: 如果margin为1,则函数在行中应用,如果margin为2,则在列中应用。
- function: 决定了要应用在输入数据上的函数。
例子
这里是一个基本的例子,展示了apply()函数在行和列上的使用。
# create sample data
sample_matrix <- matrix(C<-(1:10),nrow=3, ncol=10)
print( "sample matrix:")
sample_matrix
# Use apply() function across row to find sum
print("sum across rows:")
apply( sample_matrix, 1, sum)
# use apply() function across column to find mean
print("mean across columns:")
apply( sample_matrix, 2, mean)
输出
lapply()函数
lapply()函数帮助我们在列表对象上应用函数,并返回一个相同长度的列表对象。R 语言中的 lapply() 函数将一个列表、向量或数据框作为输入,并以列表对象的形式给出输出。由于 lapply() 函数对列表中的所有元素进行了某种操作,所以它不需要 MARGIN。
语法: lapply( x, fun )
参数
- x: 决定了输入向量或一个对象。
- fun: 决定了要应用于输入数据的函数。
例子
这里是一个基本的例子,展示了对一个向量使用 lapply() 函数的情况。
# create sample data
names <- c("priyank", "abhiraj","pawananjani",
"sudhanshu","devraj")
print( "original data:")
names
# apply lapply() function
print("data after lapply():")
lapply(names, toupper)
输出
sapply()函数
sapply()函数帮助我们在一个列表、向量或数据框上应用函数,并返回一个相同长度的数组或矩阵对象。R语言中的sapply()函数将一个列表、向量或数据框作为输入,并以数组或矩阵对象的形式给出输出。由于sapply()函数对对象的所有元素进行了某种操作,所以不需要MARGIN。它与 lapply() 相同,唯一的区别是返回对象的类型。
语法: sapply( x, fun )
参数
- x: 决定了输入向量或一个对象。
- fun: 决定了要应用于输入数据的函数。
例子
这里是一个基本的例子,展示了对一个向量使用sapply()函数的情况。
# create sample data
sample_data<- data.frame( x=c(1,2,3,4,5,6),
y=c(3,2,4,2,34,5))
print( "original data:")
sample_data
# apply sapply() function
print("data after sapply():")
sapply(sample_data, max)
输出
tapply()函数
tapply()帮助我们计算统计量(平均值、中位数、最小值、最大值等)或对一个向量中的每个因子变量进行自写的函数操作。它帮助我们创建一个向量的子集,然后对每个子集应用一些函数。例如,在一个组织中,如果我们有员工的工资数据,我们想找到男性和女性的平均工资,那么我们可以使用 tapply() 函数,将男性和女性作为因素变量性别。
语法: tapply( x, index, fun )
参数
- x: 决定了输入向量或一个对象。
- index: 决定了帮助我们区分数据的因子向量。
- fun: 决定了要应用于输入数据的函数。
例子
这里是一个基本的例子,展示了tapply()函数在钻石数据集上的使用,该数据集由tidyverse包库提供。
# load library tidyverse
library(tidyverse)
# print head of diamonds dataset
print(" Head of data:")
head(diamonds)
# apply tapply function to get average price by cut
print("Average price for each cut of diamond:")
tapply(diamondsprice, diamondscut, mean)
输出