资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,R 基础知识,一、R简介,二、,R,的数据结构,三、R程序包,四、,R,函数,五、,R,绘图,六、控制流,1,软件,:志愿者管理的软件。,免费,运算功能强大.,不依赖于操作系统。,帮助功能完善。,统计分析能力尤为突出。,可移植性强。,强大的拓展与开发能力。,灵活而不死板。,2,一、,R 简介,3,什么是,R?,图,1 R,首页的图形,R,是一种统计绘图语言,也指实现该语言的软件。,The R Project for Statistical Computing,4,简 史,R,语言是从,S,统计绘图语言演变而来,可看作,S,的“方言”。,S,语言上世纪,70,年代诞生于贝尔实验室,由,Rick Becker,John Chambers,Allan Wilks,开发。,基于,S,语言开发的商业软件,Splus,,可以方便的编写函数、建立模型,具有良好的扩展性,在国外学术界应用很广。,1995,年由新西兰,Auckland,大学统计系的,R,obert Gentleman,和,R,oss Ihaka,,基于,S,语言的源代码,编写了一能执行,S,语言的软件,并将该软件的源代码全部公开,这就是,R,软件,其命令统称为,R,语言。,5,R,的无私奉献者,Bill Venables,Robert Gentleman,Ross Ihaka,6,R,的特点,多领域的统计资源,目前在,R,网站上约有,2400,个程序包,涵盖了基础统计学、社会学、经济学、生态学、空间分析、系统发育分析、生物信息学等诸多方面。,跨平台,R,可在多种操作系统下运行,如,Windows,、,MacOS,、多种,Linux,和,UNIX,等。,命令行驱动,R,即时解释,输入命令,即可获得相应的结果。,7,为什么选择,R,?,丰富的资源,涵盖了多种行业数据分析中几乎所有的方法。,良好的扩展性,十分方便得编写函数和程序包,跨平台,可以胜任复杂的数据分析、绘制精美的图形。,完备的帮助系统,每个函数都有统一格式的帮助,运行实例。,GNU,软件,免费、软件本身及程序包的源代码公开。,8,R,的缺点,用户需要对命令熟悉,与代码打交道,需要记住常用命令。,占用内存,所有的数据处理在内存中进行,不适于处理超大规模的数据。,运行速度稍慢,即时编译,约相当于,C,语言的,1/20,。,相比点击鼠标进行操作,,R,仍能够大大提高效率。,9,图,2,R,软件首页,www.r-project.org/,10,CRAN,The Comprehensive R Archive Network,简称,CRAN,,由世界几十个镜像网站组成网络,提供下载安装程序和相应软件包。各镜像更新频率一般为1-2天,推荐镜像:,中国的镜像:数学所,ftp.ctex.org/mirrors/CRAN/,即时更新的CRAN源,cran.r-project.org/,11,www.r-project.org/,R,的核心开发与维护小组通过,R,工程网站及时发布有关信息,包括,R,的简介、,R,的更新及宏包信息、,R,常用手册、已经出版的关于,R,的图书、,R,通讯和会议信息等。,12,Windows,下载和安装,R,CRAN:BinariesWindowsbase,下载完成后,双击,R-2.11.0-win32.exe,开始安装。,一直点击下一步,各选项默认,语言建议选英文。,图,3 R2.11.0,下载页面,13,R,的运行平台,R_GUI,启动R,看到,R GUI,(graphic users interface)的主窗口,由三部分组成:主菜单、工具条、R console(R的运行窗口),R console,14,R,的运行平台,R console,主要工作是在这里通过发布命令来完成的,包括数据集的建立,数据的分析,作图等,.,在这里可以得到在线帮助,help(),得到相应函数的帮助,例如,help(plot),help.start(),HTML,格式的关于,R,的帮助文件,demo(),得到,R,提供的几个示例,;demo(fm),q(),退出,R,15,工具条介绍,Source R code,Load image,Save image,Copy and Paste,Stop current computation,Source R code,执行,R,文件,(*.R,或,*,.r),Save image,保存工作空间,文件名为,*,.RData,Load image,打开已有的工作空间,Stop current computation,中止当前计算,(,由于超时等原因,),(,打开程序脚本,),(,载入映象,),(,保存映象,),(,打印,),(,中断目前的计算,),16,图,4 R,登陆界面,(Windows,版,),路径:开始,所有程序,R 2.11.0,菜单栏,快捷按钮,控制台,光标,:,等待输入,17,图,5 R Gui,的,File,菜单,18,图,6 R Gui,的,Edit,菜单,19,图,7 R Gui,的,Packages,菜单,20,图,8 R Gui,的,Help,菜单,21,R,程序包(,R Packages,),程序包是什么?,R,程序包是多个函数的集合,具有详细的说明和示例。,Window,下的,R,程序包是经过编译的,zip,包。,每个程序包包含,R,函数、数据、帮助文件、描述文件等。,为什么要安装程序包?,R,程序包是,R,功能扩展,特定的分析功能,需要用相应的程序包实现。,例如:系统发育分析,常用到,ape,程序包,群落生态学,vegan,包等。,22,常用,R,程序包,(I),ade4,利用欧几里得方法进行生态学数据分析,adephylo,系统进化数据挖掘与比较方法,ape,系统发育与进化分析,apTreeshape,进化树分析,boot,Bootstrap,检验,cluster,聚类分析,ecodist,生态学数据相异性分析,FD,功能多样性分析,geiger,物种形成速率与进化分析,23,常用,R,程序包,(II),Graphics,绘图,lattice,栅格图,maptools,空间对象的读取和处理,mefa,生态学和生物地理学多元数据处理,mgcv,广义加性模型相关,mvpart,多变量分解,nlme,线性及非线性混合效应模型,ouch,系统发育比较,pgirmess,生态学数据分析,phangorn,系统发育分析,24,常用,R,程序包,(III),picante,群落系统发育多样性分析,raster,栅格数据分析与处理,seqinr,DNA,序列分析,sp,空间数据处理,spatstat,空间点格局分析,模型拟合与检验,splancs,空间与时空点格局分析,stats,R,统计学包,SDMTools,物种分布模型工具,vegan,植物与植物群落的排序,生物多样性计算,25,图,9 CRAN Task Views,:对程序包的分类介绍,CRAN Task Views,26,图,10 vegan,包页面,三种平台上的程序包,27,R,程序包,在,CRAN,提供了每个包的源代码和编译好的程序包,以,vegan,包为例,,CRAN,提供了:,Package source:vegan_1.17-2.tar.gz,MacOS X binary:vegan_1.17-2.tgz,Windows binary:vegan_1.17-2.zip,Reference manual:vegan.pdf,Window,下程序包为,zip,文件,安装时不要解压缩。,28,安装程序包的方法,1,用函数,install.packages(),,,如果已经连接到互联网,在括号中输入要安装的程序包名称,选择镜像后,程序将自动下载并安装程序包。,例如:要安装,picante,包,在控制台中输入,install.packages(picante),2,安装本地,zip,包,路径:,Packagesinstall packages from local files,选择本地磁盘上存储,zip,包的文件夹。,29,程序包使用,程序包的中函数,都要先导入,再使用,因此导入程序包是第一步。,在控制台中输入如下命令:,library(vegan),library(ade4),程序包内的函数的用法与,R,内置的基本函数用法一样。,library(vegan),This is vegan 1.17-2,30,查看程序包帮助文件,vegan,程序包内部都有哪些函数?分别有什么功能?,查询程序包内容最常用的方法:,1,菜单 帮助,Html,帮助,2,查看,pdf,帮助文档,31,查看函数的帮助文件,函数的默认值是什么?怎么使用?使用时需要注意什么问题?需要查询函数的帮助。,1,?,t.test,2 RGuiHelpHtml help,3,apropos,(,t.test,),4,help,(,t.test,),5,help.search,(,t.test,),6,查看,R,包,pdf,手册,32,图,11,R,帮助文件的内容与格式,33,帮助文件的内容,lmstats#,函数名及所在包,Fitting Linear Models#,标题,Description#,函数描述,Usage#,默认选项,Arguments#,参数,Details#,详情,Author(s)#,作者,References#,参考文献,Examples,#,举例,34,R,图形界面:,R commander,R commander,是,R,的图形界面之一,是,John Fox,教授编写的,适用于不希望,R,编程的用户。随着用户的操作,其窗口还可以显示出相应操作的,R,程序,对于初学者可能会有帮助。,安装,R commander,install.packages(Rcmdr),R,将自动下载并安装,Rcmdr,所需的所有程序包,35,图形界面之一:,R Commander,图,12 R commander,界面,library,(Rcmdr),界面操作代码,结果输出,36,为什么要学习编程,?,界面操作直观易学,但也存在一些不足:,(1),操作的过程难以保存,数据处理不够灵活,在进行步骤繁多的数据处理工作时十分费时费力;,(2),在建立模型或自己编写函数时也会遇到困难。,而这些困难可以通过编程解决。,要学习,R,编程,首先要了解,R,的函数、对象及其操作。,37,R,通常缺省的安装目录为,C:Program FilesRR-X.X.X,其中,R-X.X.X,为版本号,安装时可以改变目录。,38,1,查看当前,R,工作的空间目录,getwd,(),2,将,R,工作的路径设置为,d:/data/,setwd(“d:/data”),或者“文件”,“改变当前目录”,save.image(example.Rdata),load(example.Rdata),3,历史,history(Inf),39,使用,R,,在任务结束时用,q(),来中止。选择是否保存。,dos,结束某一命令,40,R,主页,:,www.r-project.org,CRAN(Comprehensive R Archive Network),cran.r-project.org,CRAN,的镜像站点,cran.r-project.org/mirrors.html,UCLA,提供的关于,R,与,S-Plus,的联接,具有搜索功能,statcomp.ats.ucla.edu/splus/default.htm,李东风主页提供了的,Windows,版本,-,稳妥,(,分布,),广义回归分析,tseries,时间序列分析,VaR,风险值分析,matrix,矩阵运算,cinterface C,与,R,的接口,foreign,读写由,S,Minitab,SAS,SPSS,Stata,等软件的数据,normix,混合正态分布分析,nortest,正态分布的,Anderson-Darling,检验,MCMCpack,基于,Gibbs,抽样的,MCMC,抽样方法,fracdiff,分数差分模型的极大似然估计,还有很多,统计分析软件包,42,二、,R,的数据结构,(1),R,的对象与属性,(2)向量的建立,(3)矩阵与数组的建立,(,4),数据框的建立,(,5,)列表的建立,()时间序列的建立,43,(1),R,的对象与属性,R,通过一些对象来运行。所有的对象有两个内在属性:类型和长度。,类型有四种:数值型、字符型、复数型、逻辑型。,可通过,mode(),和,length(),得到类型和长度。,44,表 数据对象及类型,对象,类型,是否允许同一个对象中有多种类型,向量,数值型、字符型、复数型、逻辑型,否,因子,数值型、字符型,否,数组,数值型、字符型、复数型、逻辑型,否,矩阵,数值型、字符型、复数型、逻辑型,否,数据框,数值型、字符型、复数型、逻辑型,是,时间序列,数值型、字符型、复数型、逻辑型,否,列表,数值型、字符型、复数型、逻辑型,函数,表达式,是,45,如何为对象起名?,R,处理的所有数据、变量、函数和结果都以对象的形式保存。,1.,区分大小,写,注意,China,和,china,的不同。,2.,不能用数字作为变量,对象也不能用数字开头,,但是数字可以放在中间或结尾,如,2result,与,result2,,,后者是合法的。,3.,建议不要用过短的名称。可以用,”,.,”,作为间隔,例如,anova.result1,。,4.,不要使用保留名:,NA,NaN,pi,LETTERS,letters,month.abb,month.name,46,浏览对象的信息,函数,ls(),的功能是显示所有内存中的对象,只列出对象名。如:,name-“Carmen”;n1-10;mls(),ls(pat=“m”)#,名称中带有字符,m,ls(pat=“m”#,限定名称中以字母,m,开头,47,rm(x)#,删除对象,x,rm(list=ls()#,删除内存中所有对象,rm(list=ls(pat=“m”)#,删除内存中以,m,开头的对象,48,(2)向量的建立,统计分析中最常用的是,数值型的向量,,建立函数:,seq(),或“:”,#,若向量具有较为简单的规律,rep()#,若向量具有较为复杂的规律,c()#,若向量没有什么规律,scan()#,通过键盘逐个输入,49,例子,1:10,1:10-1,1,:(10-1),seq(1,30),#,等价于 seq(from=1,to=30),seq(-5,5,by=,0,.2),seq(,1,10,length=11,),50,序列一个相关的函数是rep(),这个函数可以用多种复杂的方法来复制一个对象。最简单的形式是,s5 rep(2:5,2),rep(1:3,times=4,each=2),scan()#,通过键盘建立向量,1:1 1.5 2 2.5#,此行末空格后回车,10,:,#,冒号后回车,Read 3 items,52,R命令将创建一个名为x:,x-c(10.4,5.6,3.1,6.4,21.7),函数c()的作用是将参数中的数值向量以及向量的值首尾相接组成一个新的向量。,53,y c(“green”,“blue sky”,“-99”),55,逻辑型,向量的建立,一个逻辑向量的值可以是,TRUE,FALSE,NA.,xtemp13,7!=6,(7=9)&(70),56,数值型向量的运算,数学运算 运算后给出数值结果,+,-,*,/,(,幂,),比较运算 运算后给出判别结果,(,TRUE FALSE,),=,=,!=,逻辑运算 与、或、非,!,&,&,|,|,57,v x1:10#,选取,x,的前,10,个元素,xc(1,4)#,选取,x,的第,1,个和第,4,个元素,yxx10#,值大于,10,的元素,yz0)#x,中非负非缺失值,62,矩阵的创建,生成矩阵的函数,matrix,(),对角阵常用,diag(),建立:,matrix(data=,nrow=,ncol=,byrow=FALSE,dimnames=NULL),byrow表示数据给出的值是按列填充;,dimnames给行和列命名。,matrix.x matrix(1:6,2,3),mat-matrix(c(1,2,3,11,12,13),nrow=2,ncol=3,byrow=TRUE,dimnames=list(c(row1,row2),c(column1,column2,column3),64,colnames()和rownames()函数来修改行名和列名;,matdimnames(mat),dim(,mat,),#,计算矩阵的行列数,66,xvdiag(v),67,矩阵下标与子集(元素)的提取,xx2,2#,提取一个元素,x2,#,提取一行,x,c(2,3)#,提取若干列,x-1,#,去掉一行,x,3xis.na(x)t()#,转置,diag()#,提取对角元,rbind(a,b)#,按行合并,cbind(a,b)#,按列合并,A*B#,逐元乘积,A%*%B#,代数乘积,det()#,方阵的行列式,69,数组的建立,数组由函数,array(),建立,一般格式:,array(data,dim,dimnames),其中,data,是一个向量;,dim,是数组的维数向量;,dimnames,为各维的名称构成的向量。,矩阵是数组的特例。,70,AAAAx=c(42,7,64,9),y=1:4,z.df=data.frame(INDEX=y,VALUE=x),73,一个数据框还可以通过读取数据文件(文本文件、,excel,文件或其他统计软件的数据文件)建立。,通过函数,read.table(),读取文件,74,适用于数据框的函数,attach(Puromycin)#,挂接数据集使之激活,Puromycin,是,R,的内嵌数据集,help(Puromycin)#,显示前几行,summary(Puromycin)#,显示主要的描述统计量,75,数据框的下标与子集的提取,Puromycin1,1#,提取单个元素,Puromycinc(1,3,5),c(1,3)#,提取一个子集,Puromycinc(1,3,5),#,提取第,1,3,5,行,所有列,76,提取一列(变量的值):,一个数据框的变量对应了数据框的一列,如果变量有名称,则可直接使用“数据框,$,变量名”这种格式指向对应的列,Puromycin$conc#,等价于,Puromycin,1,77,提取满足条件的子集:,subset(Puromycin,state=“treated”&rate160),subset(Puromycin,concmean(conc),78,数据框中添加新变量,如,在,Puromycin,中增加变量,iconc,其定义为,1/conc,则方法如下:,Puromycin$iconcPuromycin$iconc Puromycinhead(Puromycin),79,(,5,)列表的建立,列表是包含任何类型的对象。,L1L2L2$x,L21,L21,L212,L2$x2,L2$y4,80,(6),时间序列的建立,由函数,ts(),通过一向量或者矩阵创建一个一元或多元的时间序列,调用格式为:,ts(data=NA,start=1,end=numeric(0),frequency=1,deltat=1,ts.eps=getOption(“ts.eps”),class,names),81,data,一个向量或矩阵;,start,第一个观察值的时间,;,end,最后一个观察值的时间;,frequency,单位时间内观察值的频数,;,deltat,两个观测值间的时间间隔,;(F,与,D,给一个);,ts.eps,序列之间的误差限,如果序列间的频率差异小于,ts.eps,,则认为此序列的频率相等;,class,对象的类型,;,names,一个字符型向量,给出序列的名称,82,ts(1:10,start=1959);,ts(1:47,frequency=12,start=c(1959,2),ts(1:10,frequency=4,start=c(1959,2),ts(matrix(rpois(36,5),12,3),start=c(1961,1),frequency=12),83,数据的存储与读取,保存为文本文件的方法:,setwd(“c:/data”),dwrite.table(d,file=“c:/data/foo.txt”,row.names=F,quote=F)#row.names=F,表示行名不写入文件,,quote=F,表示变量名不放在双引号中。,84,保存为逗号分隔的文本文件:,write.csv(d,file=“c:/data/foo.txt”,row.names=F,quote=F),保存为,R,格式文件:,save(d,file=“c:/data/foo.Rdata”),在经过一段时间分析后,需将工作空间的映像保存起来,,save.image(),85,数据的读取,文本文档数据的读取:,read.table(file=“,文件名,”),Read,fwf(),读取文件中固定宽度格式的数据,86,Excel,数据的读取:,使用程序包,RODBC.,要得到文件“,c:databody.xls,”中工作表,1,(,sheet1,)中的数据,,Library(RODBC),z-odbcConnectExcel(“c:databody.xls”),foo(.pachages(),也可以用,search(),命令来显示结果。,2,、标准包中其他的程序包需要使用:,library(),或,require(),函数才能载人内存,如:,library(grid),3,、,library(help=grid),可以了解更多,grid,的信息,95,捐赠包:,捐赠包由一些项目发布,项目包括,CRAN,,,Bioconductor,OmegaHat,等。,捐献包使用前需要用户自行下载安装和载人。,捐献包名称的完整列表及相关的描述可从,CRAN,网站上获得。,96,1,、,#,包的数目,nrow(available.packages(),或,dim(available.packages()1,或,length(available.packages(),1),2,、,#,包的名称,available.packages(),97,表 部分推荐包,包的名称,功能,boot,抽样和,bootstraping,方法,class,分类方法,cluster,聚类方法,foreign,读取各种格式(,SPSS,SAS,等)的外部数据,KemSmooth,核密度拟合方法,lattice,grid,图,MASS,包含很多有用的函数、工具和数据集,mgcv,广义的可加模型,nlme,线性和非线性混合效应模型,nnet,神经网络和多项对数线性模型,rpart,递归分割,spatial,空间分析,survival,生存分析,98,(二)程序包的安装,R,程序包是以两种形式发布:源码包和编译包。,两者都是压缩包文件;,源码包文件扩展名为,.tar.gz,编译码为,.zip;,两种形式大多数包都可从,CRAN,网站下载,有时只可获得源码包,可用命令安装:,install.packages(file_name_and_path,repos=NULL,type=“score”),其中,file_name_and_path,是源代码的名称和路径。,99,使用程序包的步骤:,1,、下载及安装程序包(放到硬盘);,2,、加载或调入程序包(放到内存)。,100,程序包的安装步骤:,1,、选择软件库(软件库中保存着主要项目发布的程序包);,2,、设置镜像网站(大多数国家有,CRAN,镜像网站);,3,、安装程序包(将程序包文件放到硬盘)。,101,联网方式安装,R,软件包,1,、点击“程序包”,“选择软件库”,2,、点击“设置,CRAN,镜像”,选择一个距离最近、速度最快、运行最稳定可靠的服务器,如中国用户可选择:,Beijing1,、,Beijing2,、,Hong Kong,、,Xiamen,之一即可。,3,、点击“安装程序包”,102,非联网方式安装程序包,1,、用户需要通过各种非上网途径获得,zip,文件;,2,、点击“程序包”,“从本地,zip,文件安装程序包”。,103,(三)程序包的操作函数,函数名称,功能,library,(),列出当前可用(已安装)的程序包的名称,library,(,abc,),加载程序包“,abc,”,require,(,abc,),同上,library,(,help=abc,),查看关于程序包“,abc,”,的文档,search(),列出已加载的,R,程序包和对象,(.packages(),显示当前已加载的所有,R,程序包名称,.packages(all.available=TRUE,),以字符型向量显示所有已装包的名称,detach(“package:abc”),移出程序包“,abc,”,installed.packages(),列表显示目前已安装的程序包,available.packages(),显示从一个或多个软件库中可以获得的程序包的名称,用于查看关于所有包的名称、版本、操作系统要求等的信息,old.packages(),显示软件库中所提供的当前已安装程序包的新版本。那些已安装的程序包目前有新版本?,new.packages(),显示软件库中所提供的当前尚未安装的程序包的名称。目前还有哪些程序包尚未安装?,download.packages(),将指定程序包的最新版本下载到指定文件夹。哪些已装包目前有新版本,以交互方式决定更新哪个包?,update.packages(),将已安装的程序包更新到最新版本,install.packages(),安装新的程序包,remove.packages(),删除已安装的程序包并更新索引信息,104,(四)程序包及其帮助,程序包是进行统计运算的基本部件,利用实际操作案例来应用。,1,、查看程序包,car,是否已加载;,2,、查看程序包,car,是否已安装;,3,、安装程序包,car;,4,、加载程序包;,5,、是否有关于程序包,car,的帮助?,6,、查找关于,Angell,数据框的信息;,7,、查找关于,scatterplot,函数的功能;,105,8,、运行一段使用,scatterplot,函数的示例程序;,9,、移除,car,程序包;,10,、卸载,car,程序包;,11,、列出关于流行病学的程序包的名称;,12,、列出关于环境科学的程序包名称。,106,1,、查看程序包,car,是否已加载及安装,用函数,(.packages(),检查内存是否已加载程序包,car;,用函数,.packages(all.available=TRUE),查看程序包,car,是否已安装;,两种函数检查都未在内存中发现程序包,car.,107,注意:在安装程序包以前,建议首先把当前已安装的相关程序包全部升级到最新版本:,方法一:,update.packages(),方法二:点击“程序包”,“更新程序包”,“确定”,108,3,、安装程序包,car,(,1,)从互联网安装,方法一:,install.packages(“car”,dependencies=TRUE),方法二:,“程序包”,“安装程序包”,“,car,”,确定。,109,(,2,)从本地,zip,文件安装,登陆:,www.r-project.org/,CRANChinaPackages,Table of available packages:sorted by name carWindowsbinaries:r-devel:,car_2.0-25.zip,保存在电脑,110,(,3,)从本地,zip,文件安装程序包,方法一:,install.packages(“,文件位置,/,文件名,”),方法二:“程序包”,“从本地,”,“选择,car,程序包的位置及程序包”,“成功”,111,检查,car,的加载安装情况:,(.packages(),结果显示尚未加载。接着查看程序包,car,是否已安装:,.packages(all.available=TRUE),112,4,、加载程序包,library(car)#,加载,car,程序包,再检查是否被加载:,(.packages(),113,5,、是否有关于程序包,car,的帮助?,library(help=car),得到有关程序包,car,的帮助信息。,114,6,、查找关于,Angell,数据框的信息,help(Angell),结果没有帮助信息,因此此包并未调入或尚未安装。,115,7,、查找关于,scatterplot,函数的功能,?scatterplot,该语句是查找关于,scatterplot,函数的帮助信息。,由于,scatterplot,是,car,包中的函数。,116,8,、运行一段使用,scatterplot,函数的示例程序,library(car),help(Prestige)#,获取关于数据集,Prestige,的帮助信息,scatterplot(prestigeincome|type,data=Prestige,span=1,legend.coord=“topleft”,main=,三个社会,nprof-,专业,;bc-,蓝,;wc-,白,),117,9,、移除,car,程序包,detach(package:car),#,将程序包,car,移出工作空间。,118,10,、卸载,car,程序包,remove.packages(car)#,卸载程序包,car.,.libPaths()#,查看程序包的位置,即已安装的程序包所在的文件夹,dir(.libPaths()#,显示程序包位置上的文件和目录,119,11,、列出关于流行病学的程序包的名称,?epidem,12,、列出关于环境科学的程序包名称,?pollution,120,二、,R,函数,(一)函数的调用与查询,(二)用户自定义函数,(三)几种特殊的函数,121,函数是具有各种特定功能的,R,对象。,当,R,运行时,变量和数据经过函数加工处理而产生结果。,函数是进行统计分析的核心部件。,R,系统中,函数分为若干类:数学函数、统计函数、绘图函数和日期函数等。,122,(一)函数的调用与查询,函数的调用基本形式:,函数名(参数),(,1,)当不需向函数传递任何参数时,形式为:,my_function(),把函数指定给一个对象,形式为:,result-my_function(),123,(2),当需调用一个函数,按参数的名称来传递各种不同参数时,调用格式:,result-my_function(arg_nameN=argN,arg_name1=arg1,,,arg_name2=arg2),(3),当需调用一个函数,按参数的排列位置来来传递各种不同参数时,调用格式:,resultset.seed(123)#,给定产生随机数的种子(,123,),使每次产生的随机数相同,xset.seed(123),yset.seed,rnorm,126,也可以用,formals(),、,body(),、,environment(),输出给定函数的以上三个部分的内容,如:,(aaa(bbb(ccc args(rnorm),function(n,mean=0,sd=1),NULL,128,(二)用户自定义函数,R,提供了丰富的函数,但全部满足需求是不可能的,自己写出函数,编写格式为:,function(arglist)expr,return(value),function,表示创建一个函数,;arglist,是形式参数组成的列表,其可以是一个符号,一个具有“,symbol=expression,”形式的语句;或者是一个特别形式参数“,”。,129,expr,是一个或多个有效的,R,表达式,若是多个表达式组成,则需加花括号“,”,;,value,为要返回结果的表达式。若函数是以一个要返回的表达式结尾,则,return,命令不必写出。,130,单参数的用户定义函数,(,1,)打印参数值,x,echoecho(x=5),xecho(x),131,(2),定义一个计算立方数的函数,fncube(),fncubexfncube(x),132,具有多个参数的函数,(,1,)函数计算,(p-q)/q,dif-function(p,q),resultdif(p=7,q=5),133,(,2,)建立函数,fnpower,用于计算乘法,fnpowerfnpower(5,3),134,(,3,)向函数传递任意个参数,my.foo my.foo(2,3,76,45,43,976,34),135,函数参数的默认值,my.foomy.foo(4,3),my.foo(x=4,y=3),my.foo(y=3,x=4),136,my.foomy.foomy.foo(2,3,sin),139,将,plot(),函数作为参数传递给,my.foo(),my.foomy.foo(2:20,3,plot),140,(三)几种特殊的函数,(1),统计函数:,mydfsapply(mydf,c(1:3),mean),141,summary(),函数返回最大值、第一四分位数、中位数、均数、第三四分位数、最大值,summary(mydf),142,表 常用的统计函数,sum(x),对,x,中的元素求和,prod(x),对,x,中的元素求连乘积,max(x),X,中元素的最大值,min(x),X,中元素的最小值,wich.max(x),返回,X,中最大元素的下标,wich.min(x),返回,X,中最小元素的下标,range(x),X,中元素的最小值和最大值,length(x),X,中元素的数目,mean(),X,中元素的均值,median(x),X,中元素的中位数,var(x)or cov(x),X,中元素的方差,或协方差矩阵,cor(x),相关系数矩阵,var(x,y)or cov(x,y),X,与,y,的协方差,cor(x,y),X,与,y,的相关系数矩阵,表 常用的统计函数,143,字符函数:,1.paste(),函数连接字符串:,paste(a,b,c),paste(“a”,“b”,“c”,sep=“”)#,字符串间无空格,myvec paste(myvec,sep=,collapse=),144,substring(),提取字符串的一部分,mystr substring(mystr,7,11),1 world,145,strsplit(),函数将一个字符串分割成单个字符,strsplit(mystr,),1,1 H e l l o w o r l d,146,用正则表达式分割字符串:,strsplit(mystr,),1,1 Hello world“,strsplit(mystr,s),1,1 Hello world,147,strsplit(mystr,“seo”)#,删除,e,与,o,1,1 Hello world,148,用,regexpr(),函数在字符串中查找指定的字符串,并返回找到的字符串所在的位置及长度:,regexpr(e,mystr),1 2,attr(,match.length),1 1,attr(,useBytes),1 TRUE,149,sub(),函数指定某个字符替换另一个字符,只替换第一个。,sub(l,+,mystr),1 He+lo world,150,gsub(),函数指定某个字符替换另一个字符,所有字符都替换。,gsub(l,+,mystr),1 He+o wor+d,151,日期函数,Sys.Date()#,显示当
展开阅读全文