base-R(又称为基础R)中的apply函数族

 说明:此为学习baseR中apply函数族笔记,仅学习使用。

C++编程语言使用循环,但是R软件提倡使用向量化操作和apply系列函数来批量处理数据,从而大大简化了计算,提高代码的速度、可读性和可维护性。其实,大部分apply函数族中的函数都可以用for循环来书写。不过相比之下,apply函数族的函数更加简洁和高效。apply函数族是baseR中的最著名的一组函数,共包含了8个以apply结尾的函数,分为是apply、eapply、lapply、mapply、rapply、sapply、tapply、vapply。

1-lapply()函数

线性数据迭代。lapply()函数的名字是list(列表)+apply(应用)的组合,这个函数是对一个列表型或者向量型数据应用一个函数,返回值为列表结构,且返回值的元素个数与处理对象中的元素个数相同。

lapply(X, FUN, ...)

其中

  1. X表示需要执行运算的列表或者向量;
  2. FUN表示需要运行的函数,可以是自定义函数,即function(x) {expr};
  3. 三个点表示配合函数FUN中的相应参数设置;

2-sapply()函数

sapply()函数简约但不简单。为什么这样讲?sapply是简化版的lapply函数,但是在特定场景中,sapply函数可以实现lapply函数无法实现的功能。比如,当用户需要对多个数据值或者数据框进行索引标记时,sapply函数中的USE.NAMES参数可以毫不费力地为数据来源做标注。

sapply(X, FUN, ..., simplify=TRUE, USE.NAMES=TURE)

其中

  1. 前面三个参数与lapply函数完全一致;
  2. 参数simplify为逻辑值,默认为真,表示返回结果为向量、矩阵或者数组;若simplify=FALSE时,表示返回结果为列表。
  3. 参数USE.NAMES取值为逻辑值。默认为真,表示返回值中会携带数据被运算之前的名称信息(如果有的话),否则就会忽略名称信息。

3-apply()函数

apply函数时多维数据处理利器。可以专门用来处理二维(matrix)或者三维(array)数据。值得注意的是,apply函数所针对的处理对象内部的数值类型必须一致,即构成元素必须是同质的。当数据框内包含有不同的数值类型时,apply函数可能无法给出正确的结果。

apply(X, MARGIN, FUN, ...)

其中

扫描二维码关注公众号,回复: 16019841 查看本文章
  1. 这里的X与lapply与sapply中的X略有不同。在apply函数中,X至少是一个二维数据,否则就会报错提醒用户数据维度必须为正数。
  2. MARGIN取值为1表示将函数FUN执行到行,取值2表示将函数FUN执行到列。亦或者是两者都有(1:2);如果处理对象X中自带了名称,那么MARGIN还可以是列名或者行名。

4-vapply()函数

vapply()函数是安全版的sapply,其在处理相同的R对象时,具有略微的速度优势。

vapply(X, FUN, FUN.VALUE, ..., USE.NAMES=TRUE)

其中

参数FUN.VALUE是vapply函数的核心,这个参数的存在,vapply会在调用参数fun的具体函数时,检查参数X中的每一个数据值,以确保所有值的长度和类型均一致。

参考:

R数据科学实战:工具详解与案例分析--2019年6月出版--机械工业出版社<推荐阅读,对于apply函数族部分的介绍写的详细且易懂,可以花费较短的时间掌握这些知识。>

猜你喜欢

转载自blog.csdn.net/u011375991/article/details/131896320