R语言apply函数家族

http://biobio2010.blogspot.com/2011/04/apply.html

R语言apply函数家族

首先apply函数并不是不循环,而是不在R里循环。它的循环是通过C实现的。
其次,它不一定比其它循环方式快。
个人认为,向量化 > apply >  for 速度前者优于后者。

apply(X, margin, FUN, ...)
操作对象:matrix, array或data frame
操作方式:抽取matrix或data.frame的每行或每列,作为vector执行指定FUN
返 回 值:vector(如果FUN返回一个值), matrix(如果FUN返回一个固定长度的vector,按列排列),或list(如果FUN返回长度不同的vector)
实 例
mx=matrix(1:100,nrow=10)
apply(mx, 1, min) #对矩阵mx按第1下标-行-求最小值
apply(mx, 2, max) #对矩阵mx按第2下标-列-求最大值, colMeans(mx)
其 它
mx可以是多维array,magin也可以指定多个维度
mx=array(1:100,c(4,5,5))
apply(mx, 3, mean)#按第3下标求均值,mean(mx[,,1])
apply(mx, c(1,2), mean) #按第1,2下标求均值,mean(mx[1,1,])
FUN可以是任意函数,包括自定义函数及命令内部编写的函数
apply(mx, 2, function(x) mean(x, trim=0.1))
apply(mx, 2, function(x) c(median(x),mean(x)))
FUN的参数,可放在函数后面以传值给函数
apply(mx, 2, mean, trim=0.1)

lapply(X, FUN, ...)
操作对象:list, data.frame (不能用于matrix或array)
操作方式:针对list的每一个元素执行FUN (如果操作对象是data.frame,按列执行FUN)
返 回 值:与输入list等长的list

sapply(X, FUN, ..., simplify=T, USE.NAMES=T)
操作对象:list 简化版的lapply
操作方式:针对list的每一个元素执行FUN
返 回 值:vector, matrix或list

tapply(X, INDEX, FUN=NULL, ..., simplify=T)
操作对象:vector
操作方式:把vector根据INDEX(比如因子)分组,对每一组执行FUN
返 回 值:array或list
实 例
y = rnorm(100)
cat1 = gl(10,10,length=100,labels=LETTERS[1:10])
tapply(y,cat1,mean)
cat2 = gl(5,2,length=100,labels=letters[1:5])
tapply(y,list(cat1,cat2),mean)

sweet(mx,margin,stats,FUN,...)
操作对象:array
操作方式:把mx根据FUN操作stats指定的统计值
返 回 值:与第一参数相同维度的array
实 例
a = matrix(rnorm(100), 10)
sweet(a, 2, colMeans(a), "-") #a的所有元素减去其所在列的均值a[m,n]-mean(a[,n])
sweet(a, 1, rowSums(a), "/")

aggregate()

by()

原文地址:https://www.cnblogs.com/lexus/p/2274518.html