05月16, 2016

apply系列函数的使用

apply系列函数的使用

apply

apply可以按照一定维度处理数组,返回数组。用法为:apply(数组,维度,函数),例如:

基本用法

#构建4*4的二维矩阵
x<-matrix(1:16,4,4)
#按照第二维(列)处理,未列出的维度压扁
apply(x,2,mean)
colMeans(x)

进阶用法

#构建10*10的二维矩阵
x<-matrix(rnorm(100),10,10)
#按照第一维(行)处理,未列出的维度压扁
apply(x,1,quantile,probs=c(0.25,0.75))

高级用法

#构建三维数组
x<-array(rnorm(2*3*4),c(2,3,4))
#按照第一二维(行列)组成的面分组处理,未列出的维度压扁,剩下的就是2*3的矩阵
apply(x,c(1,2),mean)
#按照第二三维(行列)组成的面分组处理,未列出的维度压扁,剩下的就是3*4的矩阵
apply(x,c(2,3),mean)
#按照第一三维(行列)组成的面分组处理,未列出的维度压扁,剩下的就是2*4的矩阵
apply(x,c(1,3),mean)

lapply

lapply输入list,输出list,基本用法为:lapply(列表,函数,其它参数),sapply和lapply一样,只是会尽可能的简化输出类型。例如:

#创建一个列表
x<-list(a=1:3,b=1:9)
#对列表的每一个元素进行处理,例如a与b分别是一个独立的元素,list里面存放的每个元素可以是不同类型与长度的
#如果传入的对象不是列表,会强制转化成为列表
lapply(x,sum)
#高级用法
x<-list(a=matrix(1:6,2,3),b=matrix(4:7,2,2))
#传入自己编写的函数,对每一个矩阵取第一行
lapply(x,function(m) m[1,])

mapply

mapply是lapply的多元版本,基本用法为mapply(函数,数据,函数参数),例如:

#下面两个语句等价,即对于函数rep()需要传入两个参数,
list(rep("a",4),rep("b",3),rep("c",2),rep("d",1))
mapply(rep,c("a","b","c","d"),4:1)
#再例如以下两句是等价的
mapply(runif,1:4,0,10)
lapply(1:4,runif,0,10)

tapply

针对子集进行操作,输入为向量,输出为数组,基本用法tapply(向量,因子,函数)

x<-1:15
#生成factor
f<-gl(3,5)
#按照f对x进行分组求平均
tapply(x,f,mean)

本文链接:https://blog.cosli.top/post/apply系列函数的使用.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。