R语言之apply系列函数.pdf

R语言之apply系列函数.pdf

ID:51334676

大小:372.27 KB

页数:14页

时间:2020-03-10

R语言之apply系列函数.pdf_第1页
R语言之apply系列函数.pdf_第2页
R语言之apply系列函数.pdf_第3页
R语言之apply系列函数.pdf_第4页
R语言之apply系列函数.pdf_第5页
资源描述:

《R语言之apply系列函数.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、为什么用apply因为我是一个程序员,所以在最初学习R的时候,当成“又一门编程语言”来学习,但是怎么学都觉得别扭。现在我的看法倾向于,R不是一种通用型的编程语言,而是一种统计领域的软件工具。因此,不能用通用型编程的思维来设计R代码。在AndrewLim关于R和Python的对比回答中,R是一种面向数组(array-oriented)的语法,它更像数学,方便科学家将数学公式转化为R代码。而Python是一种通用编程语言,更工程化。在使用R时,要尽量用array的方式思考,避免for循环。不用循环怎么实现迭代呢?这就需要用到apply函数族。它不是一个函数,而是一族功能类似的函数。

2、概述apply系列函数的基本作用是对数组(array,可以是多维)或者列表(list)按照元素或元素构成的子集合进行迭代,并将当前元素或子集合作为参数调用某个指定函数。vector是一维的array,dataframe可以看作特殊的list。这些函数间的关系作用目标在每个元素上应用在子集合上应用arrayapplytapplylistlapply(...)by其中lapply(...)包括一族函数lapply

3、

4、->简化版:sapply

5、

6、->可设置返回值模板:vapply

7、

8、->多变量版:mapply

9、

10、->递归版:rapply另外vector比较奇怪,vector是一维的a

11、rray,但是却不全是和array使用相同的函数。在按元素迭代的情况下,使用和list一样的lapply函数;而在按子集合迭代的情况下,tapply和by都能用,只是返回值形式不同。功能与语法描述applyapply(array,margin,FUN,...)在array上,沿margin方向,依次调用FUN。返回值为vector。margin表示数组引用的第几维下标(即array[index1,index2,...]中的第几个index),1对应为1表示行,2表示列,c(1,2)表示行列。margin=1时,apply(a,1,sum)等效于下面的操作a<-array(c(1

12、:24),dim=c(2,3,4))result=c()for(iinc(1:dim(a)[1])){result<-c(result,sum(a[i,,]))}经实测,只能用在二维及以上的array上,不能用在vector上(如果要应用于vector,请使用lapply或sapply)。以matrix为例,如下>m<-matrix(c(1:10),nrow=2)>m[,1][,2][,3][,4][,5][1,]13579[2,]246810>apply(m,1,sum)[1]2530>apply(m,2,sum)[1]37111519tapplytapply(array,i

13、ndices,margin,FUN=NULL,...)按indices中的值分组,把相同值对应下标的array中的元素形成一个集合,应用到FUN。类似于groupbyindices的操作。如果FUN返回的是一个值,tapply返回vector;若FUN返回多个值,tapply返回list。vector或list的长度和indices中不同值的个数相等。当FUN为NULL的时候,返回一个长度和array中元素个数相等的vector,指示分组的结果,vector中相等的元素所对应的下标属于同一组。例如,返回c(1,2,1,3,2),表示根据传入的indices,第1、3个元素作为一

14、组,第2、5个元素作为一组,第4个元素作为一组。一维array的例子(即vector)>v<-c(1:5)>ind<-c('a','a','a','b','b')>tapply(v,ind)[1]11122>tapply(v,ind,sum)ab69>tapply(v,ind,fivenum)$a[1]1.01.52.02.53.0$b[1]4.04.04.55.05.0二维array的例子(即matrix)>m<-matrix(c(1:10),nrow=2)>m[,1][,2][,3][,4][,5][1,]13579[2,]246810>ind<-matrix(c(rep(

15、1,5),rep(2,5)),nrow=2)>ind[,1][,2][,3][,4][,5][1,]11122[2,]11222>tapply(m,ind)[1]1111122222>tapply(m,ind,mean)1238>tapply(m,ind,fivenum)$`1`[1]12345$`2`[1]678910byby(dataframe,INDICES,FUN,...,simplify=TRUE)by可以当成dataframe上的tapply。indices应当和datafram

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。