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()