• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

R语言apply函数家族

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
RedhatLinux(Centos5/6)安装R语言发布时间:2022-07-18
下一篇:
R语言输入与输出发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap