京公网安备 11010802034615号
经营许可证编号:京B2-20210330
数据批处理--R语言里最重要的一个函数家族:*pply
之前我们讲过循环,简单讲解了向量计算,它可以代替循环进行比较搞笑的批量计算,试想计算数据框中的总收入加上10,我们没必要进行循环计算这一列的每一个元素与10的和,只需要把这一列当成一个向量执行就可以了,这就是向量计算,但是问题来了,如果我要数据框中所有列都加上10或者求所有列的均值、中位数又或对它们调用更加复杂的函数,该怎么办?第一个想到的还是循环,但是R里面循环很慢这时*pply家族的函数就派上用场了,专门完成比向量更高层次的批量处理。
apply函数
temp <- data.frame(a = rnorm(30, mean = 0), b = rnorm(30, 2), c = rnorm(30, 4))
apply(X = temp, MARGIN = 2, FUN = mean)
apply(temp, 2, sd)
apply(temp, 1, mean)
apply(temp, 2, function(x) length(x[x > 1]))
1行生成一个数据框,它每一列的数都是从一个正态分布中抽取的样本,描述一个正态分布的样本集至少要包含三个要素:样本数、均值mean、标准差sd,函数rnorm的参数也主要包含这三个要素,主要用于随机产生一个指定特征的正态分布样本集,这里a列表示随机抽取一个包含30个样本,均值为0,标准差为1(默认是1)的向量,然后赋值给a列,b为随机抽取一个包含30个样本均值为2的正态分布向量,c同样解释;为了验证抽样效果,我们可以求每一列的均值看看和设定的是否一样,这里不需要循环,只用apply函数即可,参数X(大写)用于指定数据集,MARGIN用于指定是对行计算还是对列计算,行用1表示,列2表示,也可以同时进行行和列计算,最后一个参数FUN指定调用的函数,连起来解释将temp中的每一列丢给mean函数计算求均值,可以看到第一列的均值接近0,第二列接近2,第三列接近4,和我们设定的一样;3行对每一列求标准差,可以看到标准差都接近1,和默认的标准差一样;4行对每一行求均值;5行使用了自编函数,这里是一个匿名函数,所谓匿名函数就是没有函数名,它统计x中大于1的个数,这句整体连起来是将temp的每一列丢给匿名函数,计算每一列中大于1的数值个数,有意思的是*pply家族大多数用于自编函数,进行一些批量的特殊操作。
除了对矩阵或者数据框进行操作以外,我们有时候还会用到对list的批量操作,这就需要用到lapply或者sapply函数了,
lapply函数
temp <- list(a = rnorm(30, mean = 0), b = rnorm(10, 2), c = rnorm(20, 4))
lapply(X = temp, FUN = length)
length(temp)
myfun <- function(x) {
a <- median(x)
b <- mean(x)
return(c(a, b))
}
lapply(temp, myfun)
1行创建了一个包含3个向量元素的list;2行使用lapply函数将list的每一个元素丢给length函数,统计每一个元素的长度,返回的结果是一个和X等长的list,包含3个计数结果;4行返回temp的长度为3;5行起编了一个自编函数myfun,它计算x的中位数和均值,并将结果捆绑为向量返回;最后一行将temp应用于自编函数myfun,返回计算结果,结果是一个list,和temp等长,包含三个向量,每个向量包含两个元素,即temp中每个向量的中位数和均值。
有时候我们需要向函数传递多个参数,然后进行批量操作,如下:
lapply传递多个参数
myfun2 <- function(x, y) {
a <- median(x + y)
b <- mean(x - y)
return(list(a, b))
}
b = 3
lapply(X = temp, myfun2, y = b)
1行设计了一个自编函数myfun2,它需要用户传递两个参数:x、y;最后一行使用lapply传递多个参数,只需要在FUN后面继续赋值FUN所需的参数就可以了,比如myfun2需要y参数,我们就在后面赋值y = b,这样就可以完成传参了,表示temp中每个元素向量都要和y一起参与计算,是整体的y不是y下面的每一元素,因为temp是按元素被lapply传递,而y不是,y是整体赋值。
sapply函数
sapply(X = temp, FUN = myfun, simplify = F)
sapply(X = temp, FUN = myfun, simplify = T)
sapply函数就是lapply的一个简化版本,因为它添加了simplify参数而更名为sapply,我们看到在simplify等于F时,它返回的结果和lapply一样是个list,当simplify为T时它就将结果整理成了一个矩阵,其实这个使用do.call函数也可以将lapply的结果转化为矩阵,后面应用到很多,原因是我已经忘了sapply函数。

另外一个传递多个参数进行建模的函数为mapply,这个函数很重要,一般在模型比较的交叉检验时经常用到,比如后面章节比较随机森林的树数对模型的影响时就用到了,它的一个作用就是避免多重循环,因为它和lapply的多参数传递不同,它是将多个参数的元素一一对应传递的。
mapply函数
x <- 1:3
y <- c(4, 2, 2)
z <- c(1, 3, 4)
myfun3 <- function(x, y, z) {
m <- y + z*x
}
mapply(myfun3, x, y, z)
lapply(x, myfun3, y = y, z = z)
前三行创建了三个向量,4行创建了一个自编函数myfun3;mapply函数将x、y、z的元素一一对应的传递给myfun3,返回的变量是一个向量,包含了3个元素,因为x、y、z的元素共产生了3次一一对应的关系,看到了么,如果你将要使用一个三重循环就可以使用这这种方法避免,速度快很多,具体用例请参看舆情监控的章节;而lapply返回的结果就比较复杂了,所以它们的传参逻辑不是一回事。
除了上面讲到的函数以外,*pply家族还有很多变种,什么ddply、vapply、rapply等等,大同小异根本没必要记忆,因为上面的函数足够完成它们的工作,比如tapply函数比较像分组函数,可以使用之前的透视表函数替代他,更加方便。其实一旦你搞通了之后,就会发现很多函数都是浮云,我仅仅用到两个*pply函数lapply和mapply,其他的都被其他函数替代掉了。数据分析师培训
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
机器学习算法工程的核心价值,在于将理论算法转化为可落地、可复用、高可靠的工程化解决方案,解决实际业务中的痛点问题。不同于 ...
2026-03-18在动态系统状态估计与目标跟踪领域,高精度、高鲁棒性的状态感知是机器人导航、自动驾驶、工业控制、目标检测等场景的核心需求。 ...
2026-03-18“垃圾数据进,垃圾结果出”,这是数据分析领域的黄金法则,更是CDA(Certified Data Analyst)数据分析师日常工作中时刻恪守的 ...
2026-03-18在机器学习建模中,决策树模型因其结构直观、易于理解、无需复杂数据预处理等优势,成为分类与回归任务的首选工具之一。而变量重 ...
2026-03-17在数据分析中,卡方检验是一类基于卡方分布的假设检验方法,核心用于分析分类变量之间的关联关系或实际观测分布与理论期望分布的 ...
2026-03-17在数字化转型的浪潮中,企业积累的数据日益庞大且分散——用户数据散落在注册系统、APP日志、客服记录中,订单数据分散在交易平 ...
2026-03-17在数字化时代,数据分析已成为企业决策、业务优化、增长突破的核心支撑,从数据仓库搭建(如维度表与事实表的设计)、数据采集清 ...
2026-03-16在数据仓库建设、数据分析(尤其是用户行为分析、业务指标分析)的实践中,维度表与事实表是两大核心组件,二者相互依存、缺一不 ...
2026-03-16数据是CDA(Certified Data Analyst)数据分析师开展一切工作的核心载体,而数据读取作为数据生命周期的关键环节,是连接原始数 ...
2026-03-16在用户行为分析实践中,很多从业者会陷入一个核心误区:过度关注“当前数据的分析结果”,却忽视了结果的“泛化能力”——即分析 ...
2026-03-13在数字经济时代,用户的每一次点击、浏览、停留、转化,都在传递着真实的需求信号。用户行为分析,本质上是通过收集、整理、挖掘 ...
2026-03-13在金融、零售、互联网等数据密集型行业,量化策略已成为企业挖掘商业价值、提升决策效率、控制经营风险的核心工具。而CDA(Certi ...
2026-03-13在机器学习建模体系中,随机森林作为集成学习的经典算法,凭借高精度、抗过拟合、适配多场景、可解释性强的核心优势,成为分类、 ...
2026-03-12在机器学习建模过程中,“哪些特征对预测结果影响最大?”“如何筛选核心特征、剔除冗余信息?”是从业者最常面临的核心问题。随 ...
2026-03-12在数字化转型深度渗透的今天,企业管理已从“经验驱动”全面转向“数据驱动”,数据思维成为企业高质量发展的核心竞争力,而CDA ...
2026-03-12在数字经济飞速发展的今天,数据分析已从“辅助工具”升级为“核心竞争力”,渗透到商业、科技、民生、金融等各个领域。无论是全 ...
2026-03-11上市公司财务报表是反映企业经营状况、盈利能力、偿债能力的核心数据载体,是投资者决策、研究者分析、从业者复盘的重要依据。16 ...
2026-03-11数字化浪潮下,数据已成为企业生存发展的核心资产,而数据思维,正是CDA(Certified Data Analyst)数据分析师解锁数据价值、赋 ...
2026-03-11线性回归是数据分析中最常用的预测与关联分析方法,广泛应用于销售额预测、风险评估、趋势分析等场景(如前文销售额预测中的多元 ...
2026-03-10在SQL Server安装与配置的实操中,“服务名无效”是最令初学者头疼的高频问题之一。无论是在命令行执行net start启动服务、通过S ...
2026-03-10