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()
|
请发表评论