R 各类循环简介(二)

今天我们介绍下速度比较快的apply()家族函数,它的运行速度有大神已经测试过,详情请看:https://www.jianshu.com/p/cac358ac3033

apply

在用任何函数之前我们都要了解下适用的数据类型,apply适用于dataframe,matrix等。
它为什么快呢?是因为apply是基于底层C语言的,所以性能更高
接下来我们以数据框为例:


数据类型

假设我要对行求和

aa = apply(datax,1,sum)
##1是对行做遍历
##2是对列做遍历

#自定义函数也可以
apply(datax,1,function(x){expression})

这样求出来的数据类型是numeric


lapply

这个算是个升级,lapply输出的结果是list,所以这种循环是基于元素进行遍历,因此不需要指定行或列遍历
lapply输入类型可以是一个vector或者一个对象,所以适用面比较大:

a = c(1,2,3)
b = c(2,3,4)
c = list(a,b)

lapply(c,sum)
c
lapply结果

有结果我看到,输入为list,那么遍历list里面的所有元素,进行求和,最后把结果输出成list

sapply

这个是一个简化版的lapply,与lapply的区别是输出结果的数据结构,可以将输出结果数组化,即可以输出为vectory

a = c(1,2,3)
b = c(2,3,4)
c = list(a,b)

sapply(c,sum,simplify = T)
##simplify = T为输出数组化

其中,simplify = T为输出数组化,simplify = F为输出为list


mapply

这是个升级版的sapply,可以输入多个变量
我们以数据框为例


数据类型
#对列遍历
mapply(sum, datax[1,],datax[2,],datax[3,])

#对行遍历
 mapply(sum, datax[,1],datax[,2],datax[.3])
结果

该函数对行列遍历体现在访问的是行还是列

tapply

tapply()函数与group_by()函数 + summarize()函数的功能一样
进行分组统计:

data(iris)

tapply(iris$Sepal.Width, iris$Species, sum)
结果
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容