统计模拟与R相关资料习题答案

上传人:枫** 文档编号:568328380 上传时间:2024-07-24 格式:PPT 页数:163 大小:2.43MB
返回 下载 相关 举报
统计模拟与R相关资料习题答案_第1页
第1页 / 共163页
统计模拟与R相关资料习题答案_第2页
第2页 / 共163页
统计模拟与R相关资料习题答案_第3页
第3页 / 共163页
统计模拟与R相关资料习题答案_第4页
第4页 / 共163页
统计模拟与R相关资料习题答案_第5页
第5页 / 共163页
点击查看更多>>
资源描述

《统计模拟与R相关资料习题答案》由会员分享,可在线阅读,更多相关《统计模拟与R相关资料习题答案(163页珍藏版)》请在金锄头文库上搜索。

1、统计模拟与统计模拟与主讲: 朱 强 理学院QQ群群: 6052759E-Mail:qiang_Simulation and R2021/6/161课程要求课程要求1.本课程上机实习3-4次2.每次上机需要完成一次实验并提交3.本课程怎么考试?4.总评=考勤+实验作业+考试成绩2021/6/162主要内容主要内容1.R软件介绍2.R统计分析3.统计模拟介绍2021/6/163教材和主要参考书籍教材和主要参考书籍1、肖枝洪、朱强著肖枝洪、朱强著, 统计模拟及其统计模拟及其R实现,实现, 武汉大学出版社,武汉大学出版社,20102、Sheldon.M.Ross, Simulation,(3nd),

2、Elsevier,2002 3、王兆军,陈广雷,邹长亮译,统计模拟王兆军,陈广雷,邹长亮译,统计模拟(第第4版版), 人民邮电出版社,人民邮电出版社,2007. 4、薛毅,陈立萍,统计建模与薛毅,陈立萍,统计建模与R软件,软件, 清华大学出版社清华大学出版社,2006. 2021/6/164第一篇:第一篇:R介绍介绍R是是一个开放一个开放(GPL)的统计编程环境的统计编程环境一种语言,是语言一种语言,是语言(由由AT&T Bell实验室的实验室的Rick Becker, John Chambers,Allan Wilks开发开发)的一的一种方言种方言(dialect) 之一,另一则为之一,另一

3、则为S-plus.一种软件,是集统计分析与图形直观显示于一体的统计一种软件,是集统计分析与图形直观显示于一体的统计分析分析2021/6/165R作为一个计划作为一个计划(project),最早,最早(1995年年)是由是由Auckland大学统计系的大学统计系的Robert Gentleman和和Ross Ihaka开始编制,目前由核心开发小开始编制,目前由核心开发小组组(R Development Core Team 以后用以后用R DCT表示表示)维护,他们完全自愿、工作努力负责,维护,他们完全自愿、工作努力负责,并将全球优秀的统计应用软件打包提供给我们。我并将全球优秀的统计应用软件打包提

4、供给我们。我们可以通过计划的网站们可以通过计划的网站(http:/www.r-project.org)了解有关的最新信息和使用说明,了解有关的最新信息和使用说明,得到最新版本的软件和基于的应用统计软件包得到最新版本的软件和基于的应用统计软件包. 2021/6/166R的无私奉献者Bill Venables Robert Gentleman Ross Ihaka 2021/6/167R免费免费 R 资源公开资源公开(不是黑盒子不是黑盒子,也不是吝啬鬼也不是吝啬鬼)R可以在可以在UNIX, Windows和和Macintosh运运行行.R 有优秀的有优秀的内在帮助系统内在帮助系统.R有优秀的有优秀

5、的画图功能画图功能学生能够轻松地学生能够轻松地转转到商业支持的到商业支持的 S-Plus程序程序(如果需要使用商业软件如果需要使用商业软件) R语言有一个语言有一个强大的强大的,容易学习容易学习的语法的语法,有许多内有许多内在的统计函数在的统计函数.2021/6/168通过用户通过用户自编程序自编程序, R语言很容易语言很容易延伸和扩大延伸和扩大. 它它就是这样成长的就是这样成长的.通过语言的许多内嵌统计函数,很容易学习和掌握通过语言的许多内嵌统计函数,很容易学习和掌握R语言的语法语言的语法.我们可以编制自己的函数来扩展现有的语言我们可以编制自己的函数来扩展现有的语言(这就是这就是为什么它在不

6、断等级完善为什么它在不断等级完善!)R 是计算机编程语言是计算机编程语言. 类似于类似于UNIX语言语言,C语言语言,Pascal,Gauss语言等语言等.对于熟练的编程者对于熟练的编程者, 它将觉得该语言它将觉得该语言比其他语言比其他语言更熟悉更熟悉.而对计算机初学者而对计算机初学者, 学习学习R语言语言使得学习下一步使得学习下一步的其他编程不那么困难的其他编程不那么困难.那些傻瓜软件那些傻瓜软件(SAS,SPSS等等)语言的语法则完语言的语法则完全不同全不同.2021/6/169R的缺点的缺点不如不如S-Plus在编辑输出的画图那样好在编辑输出的画图那样好没有商业支持没有商业支持 (但有网

7、上支持但有网上支持) 需要编程需要编程, 不傻瓜不傻瓜.2021/6/1610R的历史的历史S语言在语言在1980年代后期在年代后期在AT&T实验室开发实验室开发.R 项目由项目由Auckland 大学统计系的大学统计系的Robert Gentleman和和Ross Ihaka于于1995年开始的年开始的.它很快得到广泛用户的欢迎它很快得到广泛用户的欢迎. 目前它是由目前它是由R核心核心发展团队维持发展团队维持;它是一个由志愿者组成的工作努它是一个由志愿者组成的工作努力的国际团队力的国际团队2021/6/1611参考资料参考资料 随软件所附随软件所附pdf文档文档(help-manuals),

8、随版随版本更新本更新:W.N. Venables, D.M. Smith and the R DCT: Introduction to R - Notes on R: A Programming Environment for Data Analysis and Graphics, 2003.http:/bayes.math.montana.edu/Rweb/Rnotes/R.htmlR DCT, The R Environment for Statistical Computing and Graphics - Reference Index,2003.R DCT, R Data Impor

9、t/Export, 2003.R DCT, R Language Definition,2003R DCT, Writing R Extensions,20032021/6/1612Kurt Hornik, R FAQ, Version 1.8-1, 2003-10-07 B. D. Ripley, R for Windows FAQ, Version for rw1080R Html Help, Statistical Data Analysis 其它其它PDF/HTML文件:文件:Kickstarting R, http:/cran.r-project.org/doc/contrib/ L

10、emon-kickstart/R examples, Alison Gibbs, http:/www.utstat.toronto.edu/alisong/Teaching/ Winter04/Sta248/Rex.html 2021/6/1613*Ko-Kang Wang, Introduction to R for Statisticians,2004J.H. Maindonald, Using R for Data Analysis and Graphics An Introduction, 2001J.H. Maindonald, Using S-PLUS for Data Analy

11、sis and Graphics, 2001Emmanuel Paradis, R for beginners Jonathan Baron, R reference card Bret Larget, R for Introductory Statistics, 20022021/6/1614近期畅销书近期畅销书:Peter Dalgaard, Introductory Statistics with R, Springer, 2002John Maindonald, John Braun, Data Analysis and Graphics Using R - An Example-ba

12、sed Approach, Cambridge University Press,2003John Fox, An R and S-Plus Companion to Applied Regression, Sage Publications, Inc., 2002W. N. Venables and B. D. Ripley, Modern Applied Statistics with S,4th Ed., 20022021/6/1615近期畅销书近期畅销书:统计建模与统计建模与R, 薛毅等,清华大学出版社,薛毅等,清华大学出版社,2005,R语言统计分析软件教程,王斌会,语言统计分析软件

13、教程,王斌会,R语言与统计分析语言与统计分析 ,汤银才,高教出版社,汤银才,高教出版社,2008,R语言及语言及Bioconductor在基因组分析中的应在基因组分析中的应用,孙啸等,用,孙啸等,2006,科学出版社科学出版社2021/6/1616O、R的安装1.进入网站进入网站http:/www.r-project.org2.点击左边的点击左边的Download,Packages下的下的CRAN选择镜像:选择镜像:China有六个镜像点,随意点击一个有六个镜像点,随意点击一个2021/6/1617O、R的安装3.点击下图中点击下图中Windows,再点击再点击base4.点击第一行的点击第一

14、行的Download R 2.13.1 for Windows (32 megabytes)下载下载2021/6/1618一、R的运行平台R_GUI启动启动R,我们看到我们看到R GUI (graphic users interface)的主窗口的主窗口, 它由三部分组成它由三部分组成主菜单主菜单工具条工具条R console (R的运行窗口的运行窗口)R console你的主要工作是在这里通过发布命令来完成的你的主要工作是在这里通过发布命令来完成的,包括数据包括数据集的建立集的建立,数据的分析数据的分析,作图等作图等.在这里你可以得到在线帮助在这里你可以得到在线帮助help.start()

15、HTML格式的关于格式的关于R的帮助文件的帮助文件help() 得到相应函数的帮助得到相应函数的帮助,例如例如help(plot)demo() 得到得到R提供的几个示例提供的几个示例q() 退出退出R 同同Matlab类似,用方向键可以重现以前的命令类似,用方向键可以重现以前的命令2021/6/1619二、R的语法与数据结构语法语法符号符号 命令或运算提示符命令或运算提示符+ 续行符续行符基本算术运算基本算术运算+加号加号 - 减号减号* 乘号乘号/ 除号除号 乘方乘方%*% 矩阵乘法矩阵乘法% 求余数求余数%/% 整数除法整数除法赋值符赋值符= 或或 3+53-53/535x=5?ploth

16、elp(plot)2021/6/1621三、向量三、向量向量是向量是R中最为基本的类型中最为基本的类型一个向量中元素的类型必须相同,包括一个向量中元素的类型必须相同,包括数值型数值型整型整型单精度实型单精度实型双精度实型双精度实型逻辑型逻辑型复值型复值型字符型字符型2021/6/16221、数值向量、数值向量定义向量的常用方法定义向量的常用方法(函数函数)seq() 或或 : 若向量若向量(序列序列)具有较为简单的规律具有较为简单的规律rep() 若向量若向量(序列序列)具有较为复杂的规律具有较为复杂的规律c() 若向量若向量(序列序列)没有什么规律没有什么规律例例1:10seq(1,10,b

17、y=0.5)seq(1,10,length=21)rep(2:5,2)rep(2:5,rep(2,4)x=c(42,7,64,9)length(x)2021/6/1623向量运算向量运算:+,-,*,/,含义是对每个元素进行运算含义是对每个元素进行运算.例例x=1:32*x-111 3 51:表示该行的第一个数的下标表示该行的第一个数的下标.%/%:表示整数除法表示整数除法,%表示求余数表示求余数7%/%37%3两个等长的向量之间的加两个等长的向量之间的加,减减,乘乘,除除,乘方运算是乘方运算是对应元素间的四则运算对应元素间的四则运算.2021/6/16241:3+c(5,7,2)/c(5,7

18、,1) 12 3 5两个不等长的向量之间的运算则是两个不等长的向量之间的运算则是:长度短的向长度短的向量将循环使用量将循环使用.c(100,200)+c(1,2,3,4)1101 202 103 2042021/6/1625向量运算中的循环法则(recycling rule)1:2+1:41:4+1:72021/6/1626sqrt(x),log(x),exp(x),sin(x),cos(x),tan(x),abs(x)分别表示平方根分别表示平方根,对数对数,指数指数,三角函数及绝对值三角函数及绝对值.sort(x,decreasing=FALSE)返回按返回按x的元素从小到大的元素从小到大排

19、序的结果向量排序的结果向量.order(x)是使得是使得x从小到大排列的元素下标向量从小到大排列的元素下标向量,sort(x)与与xorder(x)是等效的是等效的.numeric(n):表示长度为表示长度为n的零向量的零向量注意:1:n-1与1:(n-1)的区别.1:3-11:(3-1)2021/6/16272、逻辑向量逻辑向量向量可以取逻辑值向量可以取逻辑值,如如l=c(TRUE,TRUE,FALSE)x=c(1,4,6.25)l3l1FALSE TRUE TRUE两个向量也可比较两个向量也可比较log(10*x)1 2.302585 3.688879 4.135167log(10*x)x

20、1 TRUE FALSE FALSE比较运算符比较运算符:,=,=(相等相等),!=(不等不等)逻辑向量可以进行与逻辑向量可以进行与(&)表示同时满足表示同时满足,或或(|)两者之一两者之一运算运算.2021/6/1628如如:(x=2)&(xall(log(10*x)x)判断是否有真值的函数为判断是否有真值的函数为anyany(log(10*x)x)函数函数is.na(x)用来判断用来判断x的每一个元素是否有缺失值的每一个元素是否有缺失值.如如is.na(c(1,2,NA)1 FALSE FALSE TRUE还可以将逻辑值强制转化为整数值,如:将还可以将逻辑值强制转化为整数值,如:将TRUE

21、变成变成1,FALSE变成变成0,c(0,1)(x3)+11 0 1 1 (x3)+1#+1表示把逻辑值强制转化为整数值表示把逻辑值强制转化为整数值1,01 1 2 22021/6/16293、字符型向量字符型向量c1=c(“a”,”b”)c11“a” “b”c2=c(“weight”,”height”,”年龄年龄”)c21”weight” “height” “年龄年龄”paste函数用来把它的自变量连成字符串,中间用相应的分隔函数用来把它的自变量连成字符串,中间用相应的分隔符符paste(”My”,”Job”)paste(c(“X”,”Y”),”=“,1:4)paste(“result.”,

22、1:5,sep=“”)#sep表示所用的分隔符表示所用的分隔符 paste(my,job,sep=)1 myjob paste(my,job,sep=.)1 my.job2021/6/16304、复数向量复数向量复数输入只要像格式复数输入只要像格式5+2i输入即可,如下定义复数向量输入即可,如下定义复数向量x=(0:100)/100*2*piy=sin(x)z=complex(re=x,im=y)complex函数定义复数,函数定义复数,x为实部,为实部,y为虚部为虚部plot(z)画出画出z的点图的点图也可给定模和辐角定义复数向量:也可给定模和辐角定义复数向量:zz=complex(mod=

23、1,arg=(0:11)/12*2*pi)Re()计算实部,计算实部,Im()计算虚部,计算虚部,Mod()计算复数模,计算复数模,Arg()计算复数辐角,计算复数辐角,Conj()计算共轭。基本的数学函数也支持计算共轭。基本的数学函数也支持复数运算。复数运算。sqrt(-2+0i)2021/6/16315、向量下标运算向量下标运算R中向量的下标从中向量的下标从1开始,这与通常的统计或数学软件不开始,这与通常的统计或数学软件不 一致一致而象而象C语言等计算机高级语言的向量下标则从语言等计算机高级语言的向量下标则从0开始!开始!访问向量的某个元素访问向量的某个元素xix = c(42,7,64,

24、9)x2也可单独改变某个元素的值也可单独改变某个元素的值x3=-1 访问向量的一部分的几种方法:访问向量的一部分的几种方法:(1)正整数下标向量正整数下标向量xc(1,4)142 9x2:4(2)负整数下标向量负整数下标向量x-1表示删除第一个元素表示删除第一个元素(3)逻辑下标向量逻辑下标向量xx10表示选取表示选取xxxages=c(Li=23,Zhang=33,Wang=45)ages Li Zhang Wang 23 33 45 访问时可以用通常的方法,还可以用元素名访问访问时可以用通常的方法,还可以用元素名访问ages“Zhang”Zhang 33还可以定义向量后,再后加上名字还可以

25、定义向量后,再后加上名字age1=c(21,34,56)names(age1)=c(“Zhang”,”Ding”,”Liu”)下面定义一个向量的分段函数下面定义一个向量的分段函数y=numeric(length(x)yx0=1-xxyx=0=1+xx=02021/6/1633四、矩阵与多维数组四、矩阵与多维数组1、矩阵函数格式、矩阵函数格式matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)data为数组的数据向量,为数组的数据向量,nrow为函数,为函数,ncol为列数,为列数,byrow=TRUE表示按行写入数据,否则按列。表示按行

26、写入数据,否则按列。R中默认是按列填数据。中默认是按列填数据。A=matrix(1:12,ncol=4,byrow=TRUE) A ,1 ,2 ,3 ,41, 1 2 3 42, 5 6 7 83, 9 10 11 12c(A)显示显示A的所有向量,是按列拉直的向量。的所有向量,是按列拉直的向量。cbind()把向量横向拼成一个大矩阵,把向量横向拼成一个大矩阵,rbind()把向量纵向拼把向量纵向拼成一个大矩阵。成一个大矩阵。对角和单位矩阵对角和单位矩阵 diag(1,2,3),diag(1,3)2021/6/1634B=rbind(c(1,2),c(3,4)C=cbind(c(11,12),

27、c(13,14)D=rbind(B,C)E=cbind(B,C)2、访问矩阵元素和子矩阵、访问矩阵元素和子矩阵A2,3访问是矩阵的(访问是矩阵的(2,3)元素)元素7Ai,访问第访问第i行,行,A,j访问第访问第j列列 表示访问第表示访问第 第第列交叉而成的子矩阵列交叉而成的子矩阵注意:注意:A=0表示不改变表示不改变A的大小只改变元素值为的大小只改变元素值为0也可以对矩阵的行标和列标重新命名。也可以对矩阵的行标和列标重新命名。rownames(A)=c(“a”,”b”,”c”)colnames(A)=paste(“X”,1:4,sep=“”)3、矩阵运算、矩阵运算矩阵可以进行四则运算矩阵可以

28、进行四则运算(+,-,*,/,)表示矩阵对应元素的四则表示矩阵对应元素的四则元素,参与运算一般是相同形状的元素,参与运算一般是相同形状的2021/6/1635形状不一致的向量和矩阵也可进行四则运算。规则是矩阵的数形状不一致的向量和矩阵也可进行四则运算。规则是矩阵的数据按向量(按列拉直)的对应元素进行运算。据按向量(按列拉直)的对应元素进行运算。A+c(100,200,300)矩阵乘法矩阵乘法A%*%B,t(A)表示表示A的转置。的转置。B=matrix(c(1,0),nrow=4,ncol=2,byrow=T)A%*%B4、apply函数函数对矩阵想对某行(列)进行某种计算,可用对矩阵想对某行

29、(列)进行某种计算,可用apply函数,函数,apply(x,margin,fun,)x表示矩阵,表示矩阵,margin=1表示对每行计算,表示对每行计算,margin=2表示表示对每列计算,对每列计算,fun是用来计算的函数。是用来计算的函数。apply(A,1,sum)apply(A,2,mean)5、矩阵的其他运算、矩阵的其他运算行列式:行列式:det(A) 求逆:求逆:solve(A) 特征值和特征向量:特征值和特征向量:eigen(A) 2021/6/1636例如:计算矩阵例如:计算矩阵A=求求A的行列式及逆的行列式及逆A=matrix(c(1,2,-1,-3,2,4,0,-4,-1

30、,1,2,2,0,2,1,3),nrow=4)det(A)solve(A)2021/6/1637五、因子五、因子1.factor()函数函数例子:知道例子:知道5位学生的性别,用因子变量表示位学生的性别,用因子变量表示sex=c(“M”,”F”,”M”,”M”,”F”)sexf=factor(sex);sexf1 M F M M FLevels: F M函数函数factor()用来把一个向量编码为一个因子,一般形式为用来把一个向量编码为一个因子,一般形式为factor(x,levels=sort(unique(x),na.last=TRUE),labels,exclude=NA,ordered

31、=FALSE)is.factor()检验对象是否是因子,检验对象是否是因子,as.factor()把向量转化把向量转化为因子。为因子。levels()可以得到因子的水平可以得到因子的水平sex.level=levels(sexf);sex.level1”F” “M”对因子向量可用对因子向量可用table()统计各类数据的频数。统计各类数据的频数。sex.tab=table(sexf);sex.tab2021/6/16382.tapply()函数函数例子:知道例子:知道5位学生的性别,还知道这位学生的性别,还知道这5位学生的身高,分组求位学生的身高,分组求身高的平均值身高的平均值height=c

32、(174,165,180,171,160)tapply(height,sex,mean)1 F M 162.5 175.0tapply() 的一般形式为的一般形式为tapply(x,INDEX,FUN=NULL,simplify=TRUE)x是一对象,通常为一向量,是一对象,通常为一向量,INDEX是与是与X有同样长度的因子,有同样长度的因子,FUN是要计算的函数是要计算的函数3.gl()函数函数gl()可以方便地产生因子,可以方便地产生因子,gl(n,k,length=n*k,labels=1:n,odered=FALSE)n为水平数,为水平数,k为重复的次数,为重复的次数,length为结

33、果的长度,为结果的长度,labels为为n维向量,表示因子水平,维向量,表示因子水平,ordered是逻辑变量,表示是否是逻辑变量,表示是否为有序因子,缺省值为有序因子,缺省值FALSEgl(2,3) gl(2,1,6)2021/6/1639六、列表(六、列表(list)和数据框()和数据框(data.frame)1、列表的构造、列表的构造red=list(name=“黎明黎明”,age=30,scores=c(85,76,90) rec$name1 黎明黎明$age1 30$scores1 85 76 902021/6/1640列表元素可用列表元素可用”列表名列表名下标下标”引用引用rec2

34、130rec32但列表不同于向量,每次只能引用一个元素,如但列表不同于向量,每次只能引用一个元素,如rec1:2是不允许的是不允许的对连续型变量产生因子对连续型变量产生因子,或分类或分类agerec“age”rec$age2、列表的修改、列表的修改rec$name=“张三张三”rec$age=list(20,32,58)可重新添加一些到列表中可重新添加一些到列表中rec$sex=“男男”rec6=161第第5号元素没定义,所以值是号元素没定义,所以值是”NULL”,若若rec是一个向量,则是一个向量,则空元素为空元素为”NA”列表之间还可以连接起来,列表之间还可以连接起来,List.ABC=c

35、(list.A,list.B,list.C)2021/6/16423.数据框数据框数据框通常是矩阵形式的数据,但矩阵各列可以是不数据框通常是矩阵形式的数据,但矩阵各列可以是不同类型。数据框每列是一个变量,每行是一个观测。同类型。数据框每列是一个变量,每行是一个观测。(1)生成数据框生成数据框 一般可以把数据框看作一种推广了的矩阵,它可用一般可以把数据框看作一种推广了的矩阵,它可用矩阵形式矩阵形式表示,数据框可以用表示,数据框可以用data.frame()函数生成,用法函数生成,用法与与list()函数相同函数相同ls()#列出工作空间你定义的所有变量列出工作空间你定义的所有变量str(x)#给

36、出对象给出对象x的一些信息的一些信息2021/6/1643d=data.frame(name=c(李明李明,张聪张聪,王王建建),age=c(30,35,28),height=c(180,162,175)d name age height1 李明 30 1802 张聪 35 1623 王建 28 175可以将列表转化为一个数据框可以将列表转化为一个数据框:如比较他们之间的区别如比较他们之间的区别d1=list(name=c(李明李明,张聪张聪,王建王建),age=c(30,35,28),height=c(180,162,175)as.data.frame(d1)2021/6/1644(2)数据

37、框的引用)数据框的引用引用数据框元素的方法与引用矩阵元素的方法相同。引用数据框元素的方法与引用矩阵元素的方法相同。d1:2,2:3数据框的各变量也可用按列表引用数据框的各变量也可用按列表引用(用双括号用双括号或或$引用引用)d“age”1 30 35 28d$height1 180 162 175数据框的各行也可以定义名字,用数据框的各行也可以定义名字,用rownames属性属性定义。定义。names(d)1 name age heightrownames(d)=c(one,two,three) rownames(d)1 one two three2021/6/1645(3)attach()函

38、数函数数据框的主要用途是保存统计建模的数据。调用数据数据框的主要用途是保存统计建模的数据。调用数据框的变量像以前框的变量像以前d是不方便的是不方便的,R提供了函数提供了函数attach()可以把变量调入内存。可以把变量调入内存。attach(d)r=age/height#此时此时age,height是可以利用的是可以利用的但但r的值不会进入数据框的值不会进入数据框d,若想把刚才,若想把刚才r当作新的数当作新的数据框的变量据框的变量d$r=age/weight d name age height rone 李明 30 180 0.1666667two 张聪 35 162 0.2160494thr

39、ee 王建 28 175 0.1600000detach(d)取消连接取消连接2021/6/1646(4)列表与数据框的编辑)列表与数据框的编辑可用函数可用函数edit()对列表或者数据框进行编辑对列表或者数据框进行编辑newd=edit(d)当然也可对向量,数组,矩阵类型的数据进行修改和当然也可对向量,数组,矩阵类型的数据进行修改和编辑编辑.Fix用函数用函数merge(x, y, .) 对两个数据框合并成一个对两个数据框合并成一个可查看帮助可查看帮助.?merge 2021/6/1647 七、输入输出七、输入输出1.输入输入(1)read.table()等相关函数等相关函数read.tab

40、le()函数是读表格形式的文件函数是读表格形式的文件,若若”班级班级”数据已输入到一个纯文本文件数据已输入到一个纯文本文件”cjb.txt”中中,假设存假设存储在储在c:/cjb.txt,其格式如下其格式如下:2021/6/1648学号 姓名 平时 其中 期末 总评07*001 吴蒙蒙8566646907*002 高旭9580949107*003 李楠9278556707*004 赵利冲7848404007*005 何耀龙8958516007*006 何星8544817407*007 唐佳征9573536507*008 程西平9686899007*009 陈茂琴9584697707*010 程

41、长久9479828407*011 王锋9374868507*012 何福顺9082536607*013 罗玲9693909207*014 刘卿卿9767948907*015 张晓芳93728282072301016 杨乐遥88615060072301017 沈亮95415460072301018 高晶98769189072301020 郭慧93918387072301021 陈灿92766975072301022 李婷90766975072301023 陈元俊94745969072301024 谭海梅95646370072301025 张亚琴95898588072301026 胡阳989298

42、97072301027 张冲92606569072301028 位会敏95928287072301029 胡红96789089072301030 岳鑫璐96607979072301031 李欢欢988510097072301032 陈龙龙92656470072301033 朱盼885566682021/6/1649读入格式为读入格式为:cjb=read.table(c:/cjb.txt,header=TRUE)cjbis.data.frame(cjb)1 TRUEheader=TRUE表示第一行读入的是变量名表示第一行读入的是变量名,默认是默认是header=FALSE,即自动会添上列名即自动

43、会添上列名.具体用法可见具体用法可见帮助帮助.?read.tabled=read.csv(txt.csv)#读逗号分隔的文本文件读逗号分隔的文本文件d=read.csv2(“txt.csv”)#读分号分隔的文本文件,读分号分隔的文本文件, 逗号代替小数点逗号代替小数点d=read.delim(foo.txt)#读制表符分隔的文件读制表符分隔的文件d=read.delim2(“foo.txt”)#读制表符分隔的文件,读制表符分隔的文件, 逗号代替小数点逗号代替小数点d=read.fwf(txt.fwf)#读固定宽的文件读固定宽的文件2021/6/1650D=readLines(“a.txt”)#

44、每行有不同的结构每行有不同的结构readLines(con = stdin(), n = -1L, ok = TRUE, warn = TRUE, encoding = unknown) cat(TITLE extra line, 2 3 5 7, , 11 13 17, file=ex.data, sep=n) readLines(ex.data, n=-1) unlink(“ex.data”) # 删除文件 2021/6/1651R中一般不能直接读中一般不能直接读xls文件文件,可先转换为可先转换为csv(2)scan()函数函数scan()函数可直接读纯文本文件数据和直接从屏幕上函数可直

45、接读纯文本文件数据和直接从屏幕上输数据输数据x=scan()1: 2 4 4.2 55:Read 4 timesx1 2 4 4.2 5假设有假设有10名学生的体重数据已输入文件名学生的体重数据已输入文件”weight.txt”,格式为格式为45 63.5 32.5 67.2 77.5 55 54 49 62 70w=scan(c:/weight.txt)2021/6/1652假设假设weight.txt中中,奇数是女性体重奇数是女性体重,偶数是男性体重偶数是男性体重,即数据中有不同的属性即数据中有不同的属性wfm=scan(c:/weight.txt,list(F=0,M=0)Read 5

46、records将数据读入将数据读入,并以列表的方式赋给变量并以列表的方式赋给变量wfm wfm$F1 45.0 32.5 77.5 54.0 62.0$M1 63.5 67.2 55.0 49.0 70.0其它数据格式的读入可以参见帮助文档中的其它数据格式的读入可以参见帮助文档中的R数据输入数据输入输出输出.2021/6/16532.输出输出直接输入变量名即可输出直接输入变量名即可输出x=1:5x1 1 2 3 4 5用用print(x)与上式是等价的与上式是等价的,里面有些参数里面有些参数,digits指定指定每个数输出的有效数字位每个数输出的有效数字位. options(digits=3)

47、 1/31 0.333 write.table#输出数据框到文件输出数据框到文件write.csvwrite.csv2Write.matrix#输出矩阵到文件输出矩阵到文件,需要加载包需要加载包MASS2021/6/1654cat()函数也可用来输出函数也可用来输出,但它可以把多个参数连接起来但它可以把多个参数连接起来再输出再输出(类似于类似于paste()的功能的功能)cat(i=,i,n)#注意为什么要用注意为什么要用”n”cat(c(AB,C),c(E,F),n,sep=) ABCEFcat()还可以指定一个参数还可以指定一个参数”file=文件名文件名”,把结果写到把结果写到指定的文件

48、中指定的文件中cat(i=,1,n,file=c:/result.txt)若指定的文件存在若指定的文件存在,则原内容被覆盖则原内容被覆盖,但加上但加上append=TRUE可以不覆盖原文件而是在末尾附加可以不覆盖原文件而是在末尾附加.2021/6/1655 八八 程序控制结构程序控制结构1.分支结构分支结构if(条件条件) 表达式表达式或或if(条件条件)表达式表达式1 else 表达式表达式2例如例如:if(any(xn=4;x=matrix(0,nrow=4,ncol=4)for(i in 1:n) for(j in 1:n) xi,j=1/(i+j-1) 2021/6/1657 x ,1

49、 ,2 ,3 ,41, 1.0000000 0.5000000 0.3333333 0.25000002, 0.5000000 0.3333333 0.2500000 0.20000003, 0.3333333 0.2500000 0.2000000 0.16666674, 0.2500000 0.2000000 0.1666667 0.14285712021/6/1658(2)while循环循环while(condtion)expr当条件当条件condtion成立成立,则执行表达式则执行表达式expr.例如例如编写一个计算编写一个计算100以内的以内的Fibonacci数数f=1;f2=1;

50、i=1while(fi+fi+1f11 1 2 3 5 8 13 21 34 55 89 14413 233 377 610 9872021/6/1659(3)repeat循环循环repeat exprrepeat循环依赖循环依赖break语句跳出循环语句跳出循环.例如用例如用repeat循环编写一个计算循环编写一个计算100以内的以内的Fibonacci数数f=1;f2=1;i=1repeat fi+2=fi+fi+1 i=i+1if(fi+fi+1=1000)break f11 1 2 3 5 8 13 21 34 55 89 14413 233 377 610 9872021/6/166

51、0三个例子三个例子myfn1- function(obs=10,n=100) x- rep(NA,100) for (i in 1:n) tmp - runif(obs) xi - mean(tmp) list(mn=mean(x),std=sd(x)Myfn1() 2021/6/1661myfn2- function(obs=10) x - runif(obs) while(mean(x) 0.45) obs - 2*obs x - runif(obs) list(mn=mean(x),std=sd(x),obs=obs) myfn2()2021/6/1662myfn3- function(

52、obs=10) repeat x = 0.45) break obs f=function(x) x+exp(x)f(3.5)例子例子 使用使用gamma函数求函数求n!factorial = function(n) + if (n=0) gamma(n+1) + else print(“Please input a positive integer!) + factorial(6) factorial(-6)Choose(10,5) #求组合值求组合值2021/6/1664fzero=function(f,a,b,eps=1e-5) if(f(a)*f(b)0) list(fail=“fin

53、ding root is fail!”) else repeat if(abs(b-a)eps)break x=(a+b)/2 if(f(a)*f(x) f=function(x)x3-x-1 fzero(f,1,2)$root1 1.324718$fun1 -1.405875e-052021/6/1666R软件提供了求一元方程的根的函数软件提供了求一元方程的根的函数uniroot()uniroot(f,interval,lower=min(interval),upper=max(interval),tol=.Machie$double.eps0.25,maxiter=1000,.)uniro

54、ot(f,c(1,2)$root1 1.324718$f.root1 -5.634261e-07$iter1 7$estim.prec1 6.103516e-052021/6/1667用于处理错误的函数用于处理错误的函数 用于处理用户输入不正确用于处理用户输入不正确的类型而可能出现的错误的类型而可能出现的错误warning() 若错误不严重以至影响整个计算stop() 若错误可能导致计算中止print() 显示必要的信息formatC() 数值作为字符串输出cat() 字符串联,可以插入n(换行)及t(tab键)paste() 字符粘贴(非字符型自动转换)例子:cat(R, is,a good

55、, software.n) formatC(1/3, format = f, digits = 4) formatC(1/3, format = e, digits = 4)paste(1:12) # 与as.character(1:12)等价paste(A, 1:6, sep = )paste(today is, date()2021/6/1668 例例.考虑某银行的存取系统考虑某银行的存取系统. 设设open.account()为存开户函数,为存开户函数,deposit()为存款函数,为存款函数,withdraw()为取款函数,为取款函数, balance()为存取款平衡为存取款平衡(余额

56、余额)函数函数. 对于客户对于客户的存取过程如下:的存取过程如下:2021/6/1669open.account=function(total) list( deposit=function(amount) if(amount=0) stop(Deposits must be positive! n) total total) stop(You dont have that much money!n) totala=c(-4,1,0,3)polyroot(a) 1 1.0-0.000000i -0.5+1.040833i -0.5-1.040833i 2021/6/1671十、十、R在计算中的

57、应用在计算中的应用2、求一元线性、求一元线性(非线性非线性)方程的根方程的根设一元函数为y=f(x)求方程f(x)=0在区间a,b内的所有实根。例:求方程 在区间(0,1)内的所有根。两种方法:(1)先画出函数y=f(x)图像观察它的根的大致范围f=function(x)(1-x)4-4*x*(1-x)3+4*x3*(1-x)-x4x=seq(0,1,by=0.01);y=f(x) plot(x,y,type=l); abline(h=0,col=red)2021/6/1672得到图像如下得到图像如下看出在看出在(0,1)间有三个根,间有三个根,分别位于分别位于(0.2,0.4),(0.4,0

58、.6),(0.6,0.8)利用函数利用函数uniroot求出其根求出其根uniroot(f,c(0.2,0.4)uniroot(f,c(0.4,0.6)uniroot(f,c(0.6,0.8)得到三个根分别为得到三个根分别为0.211,0.5, 0.789(2)或者直接利用包)或者直接利用包rootSolve中的函数中的函数uniroot.all()求出求出(0,1)内的所有根内的所有根library(rootSolve)uniroot.all(f,c(0,1)1 0.5000000 0.2113253 0.78867472021/6/1673十、十、R在计算中的应用在计算中的应用3、求、求n

59、元非线性方程组的根元非线性方程组的根例:求下列方程组的根model=function(x)c(F1=x12+x22-1,F2=x22-2*x1)#定义方程组library(rootSolve)multiroot(model,c(1,1)#要先给初始值2021/6/1674$root1 0.4142136 0.9101797$f.root F1 F2 6.43565e-10 6.39019e-10 $iter1 5$estim.precis1 6.41292e-102021/6/1675 十一、图形十一、图形R软件有很强的图形功能,可用简单的函数调用,软件有很强的图形功能,可用简单的函数调用,迅

60、速作出数据的各种图形。迅速作出数据的各种图形。比如:有一个班级的数据存贮在比如:有一个班级的数据存贮在c:/work/class01.txtc1=read.table(c:/work/class01.txt)colnames(c1)=c(Name,Sex,Age,Weight,Height)attach(c1)#建立连接,方便引用变量建立连接,方便引用变量plot(Height)画出身高的散点图画出身高的散点图plot(Sex)画出性别的频数条形图画出性别的频数条形图2021/6/1676常用的绘图函数常用的绘图函数plot().也可作两个变量也可作两个变量x与与y的散的散点图点图plot(H

61、eight,Weight,main=体重对身高的回体重对身高的回归归,xlab=身高身高,ylab=体重体重)plot(-50):50/25,(-50):50/25)3,type=l)表示画连线图表示画连线图stem(Height)画茎叶图画茎叶图boxplot(Weight)#绘制盒形图,可看出数据的绘制盒形图,可看出数据的大体分布,中间粗体线是中位数,其它的有最小值,大体分布,中间粗体线是中位数,其它的有最小值,最大值,最大值,1/4分位数,分位数,3/4分位数分位数2021/6/1677hist(Weight)#绘制直方图绘制直方图fit1=lm(WeightHeight)#求体重对身高

62、的求体重对身高的回归回归p1=predict(fit1,c1)对数据对数据c1进行预测进行预测boxplot(list(体重体重=Weight,预报预报=p1)画出盒形图画出盒形图函数函数qqnorm(),qqline()提供了绘画正态提供了绘画正态QQ图图和相应的直线的方法和相应的直线的方法qqnorm(Weight)qqnorm函数的用法函数的用法qqnorm(y,ylim,main=Normal Q-Q Plot,xlab=,Ylab=,plot.it=TRUE)qqline(Weight)2021/6/1678Plot通常在一个窗口出现通常在一个窗口出现,根据需要自动打开根据需要自动打

63、开.有时需要同时打开两个图形窗口有时需要同时打开两个图形窗口,可用可用dev.new()我们能够在窗口上保存图像我们能够在窗口上保存图像,或者用如下命令保存或者用如下命令保存postscript(myfile.ps)#保存其他图形格保存其他图形格#式的命令有式的命令有jpeg(),bmp(),png(),tiff()plot(1:10)dev.off()2021/6/1679I.高水平绘图函数高水平绘图函数1.plot()(1)plot(x,y)#x,y为向量,生成为向量,生成y关于关于x的散点图的散点图(2)plot(x)#x为时间序列为时间序列(3)plot(f)#f为因子,生成为因子,生

64、成f的直方图的直方图 plot(f,y)#f为因子为因子,y为向量为向量,生成生成y关于关于f水平水平的盒形图的盒形图2021/6/1680(4)plot(df)#df为数据框为数据框 plot(expr)#expr为对象名称的表达式为对象名称的表达式(如如:a+b+c) plot(yexpr)#y为任意一个对象为任意一个对象例如例如:attach(c1)plot(c1)#三项指标构成的散点图三项指标构成的散点图plot(Age+Height)#身高与年龄的散点图身高与年龄的散点图plot(WeightAge+Height)#绘出两张散点绘出两张散点图图,一张是体重与年龄的一张是体重与年龄的,

65、一张是体重与身高一张是体重与身高(5)coplot()函数函数coplot(WeightHeight|Age)#绘出按年龄绘出按年龄段给出体重与身高的散点图段给出体重与身高的散点图2021/6/16812.高水平绘图中的命令高水平绘图中的命令(1)图中的逻辑命令图中的逻辑命令 add=TRUE表示在所绘图在原图上加图表示在所绘图在原图上加图,缺省为缺省为add=FALSE即新图替换旧图即新图替换旧图axes=FALSE表示所绘图没有坐标轴表示所绘图没有坐标轴,默认默认axes=TRUE(2)Type命令命令type=“p”#绘制散点图绘制散点图(缺省值缺省值)type=“l”#绘制实线绘制实线

66、2021/6/1682type=“b” #画点和线画点和线type=“o” #实线通过所有的点实线通过所有的点type=“h” #绘出点到绘出点到x轴的竖线轴的竖线type=“s”or “S” #绘出阶梯形曲线绘出阶梯形曲线type=“n” #不绘任何点和曲线不绘任何点和曲线(3)图中的字符串图中的字符串 axes=FALSE#不画坐标不画坐标,默认默认xlab=字符串字符串,其字符串的内容是其字符串的内容是x轴的说明轴的说明,ylab=字符串意义与前面相同字符串意义与前面相同,默认是变量名默认是变量名main=字符串字符串,字符串内容是图的说明字符串内容是图的说明,出现在图的出现在图的正上方

67、正上方.sub=字符串字符串,副标题副标题,出现在出现在x轴的正下方轴的正下方,默认为空默认为空xlim=c(lo,hi),ylim=c(lo,hi)#坐标轴的范围坐标轴的范围2021/6/1683II.低水平作图函数低水平作图函数1.加点和线的函数加点和线的函数points()#在已有图形上加点在已有图形上加点,参数参数pch为画出指定的为画出指定的字符字符,可查看帮助可查看帮助.points(x,y)与与plot(x,y)作用一样作用一样lines()#在已有图上加直线在已有图上加直线,lines(x,y)与与plot(x,y,type=“l”)类似类似,线的类型由参数线的类型由参数lty

68、=n决决定定,在在help(par)中查看中查看lty2021/6/16842.在点处加标记在点处加标记函数函数text()是在图上加标记是在图上加标记,格式为格式为text(x,y,labels,)#x,y是数据形向量是数据形向量.labels可以可以是整数是整数,也可是字符串也可是字符串,缺省是缺省是labels=1:length(x)如如:plot(Weight,Height,type=n)text(Weight,Height)legend(x,y,legend,)#在制定位置给出一个盒子在制定位置给出一个盒子对图形进行解释对图形进行解释,legend是标签字符串向量其他参数是标签字符串

69、向量其他参数lty=,lwd=,col=,fill=,angle=,density,pchlocator(n,type)#在鼠标点击的地方做标记在鼠标点击的地方做标记,type为做标记的类型为做标记的类型(点或线点或线),右键选终止右键选终止identify(x,y,labels)#在制定的点在制定的点x,y处做标记处做标记,默默认为认为1:length(x).见见demo4.22021/6/16853.在图上加直线在图上加直线(1)abline(a,b)#表示画直线表示画直线y=a+bx(2)abline(h=y)#表示画出一条过所有点的水平直表示画出一条过所有点的水平直线线(3)ablin

70、e(v=x)#表示画出一条过所有点的竖线表示画出一条过所有点的竖线(4)abline(lm.obj)#表示画出线型模型得到的线型表示画出线型模型得到的线型方程方程(5)polygon(x,y,)#以数据以数据(x,y)为坐标为坐标,依次连依次连接所有的点接所有的点, 绘出多边形绘出多边形,此时与此时与plot(x,y,type=l)功能相似功能相似2021/6/16864.在图上加标记在图上加标记,说明或其它内容说明或其它内容(1)title(main=“Main Title”,sub=“sub title”)加上图的题目和子图的题目加上图的题目和子图的题目,主题目加在顶部主题目加在顶部,子题

71、目加子题目加在底部在底部(2)axis(side,)side是边是边,side=1表示所加内容放在图的底部表示所加内容放在图的底部,side=2表示所加内容放在图的左侧表示所加内容放在图的左侧,side=3表示所表示所加内容放在图的顶部加内容放在图的顶部side=4表示所加内容放在图的右侧表示所加内容放在图的右侧2021/6/16875.其他类型的图其他类型的图barplot()#画出一个条形图画出一个条形图,可用一个向量指定条形可用一个向量指定条形的高度的高度.boxplot()#产生一个箱型图产生一个箱型图pie()#画饼图画饼图pairs()#产生散点图的网格产生散点图的网格contou

72、r(),persp(),image(),画画2维图维图见见demo 4.3在制定的地方可用数学标识在制定的地方可用数学标识xlab=expression(hat(beta)2)见见demo4.42021/6/16886.一页多图一页多图 R可以在同一页面开若干个按行、列排列的窗格,在每个窗格中可以作一幅图。每个图有自己的边空,而所有图的外面可以包一个“外边空”。一页多图用mfrow参数或mfcol参数规定,如:2021/6/1689 par(mfrow=c(3,2) 表示同一页有三行两列共六个图,而且次序为按行填放。类似地, par(mfcol=c(3,2) 规定相同的窗格结构,但是次序为按列

73、填放,即先填满第一列的三个再填第二列。要取消一页多图只要再运行 par(mfrow=c(1,1)即可。缺省时无外边空。为了规定外边空大小,可以用omi参数或oma参数。omi参数使用英寸为单位,oma参数以文本行高为单位,两个参数均为四个元素的向量,分别给出下、左、上、右方的边空大小。如: par(oma=c(2,0,3,0)函数mtext用来在外边空加文字标注。其用法为mtext(text, side = 3, line = 0, outer = FALSE)2021/6/16902021/6/1691其中text为要加的文本内容,side表示在哪一边写(1为下,2为左,3为上,4为右),l

74、ine 表示边空从里向外数的第几行,最里面的一行是第0号,outer=TRUE时使用外边空,否则会使用当前图的边空。例如:par(mfrow=c(2,2), oma=c(0,0,3,0), mar=c(2,1,1,0.1) plot(Height) plot(Sex) boxplot(WeightSex);plot(Height,Weight) mtext(Simulation Data, outer=T, cex=1.5) 2021/6/16922021/6/1693在多图环境中还可以用mfg参数来直接跳到某一个窗格,比如 par(mfg=c(2,2,3,2) 表示在三行两列的多图环境中直接

75、跳到第二行第二列位置。mfg参数的后两个表示多图环境的行、列数,前两个表示要跳到的位置。可以不使用多图环境而直接在页面中的任意位置产生一个窗格来绘图,参数为fig,如: par(fig=c(4,9,1,4)/10) 此参数为一个向量,分别给出窗格的左、右、下、上边缘的位置,取值为占全页面的比例,比如上面的例子在页面的右下方开一个窗格作图。2021/6/1694实验作业实验作业1、从数据文件class.txt读入数据存为数据框,给数据框添加名字:name, age, height, weight, sex;在一页中对体重作出qqnorm图、直方图、Boxplot; 对身高和体重作qqplot图,

76、要求给出标题、坐标轴等。2、对上述数据class.txt作尽可能多的本节讲过的图。要求同时用到高级图形和低级图形函数。2021/6/16953、 将屏幕分割为四块,并分别画出y=sin(x),z=3*cos(x),a=sin(x)*cos(x),b=sin(x)/x。2021/6/1696R R- -语语言言画画图图2021/6/1697x=0:18plot(x,x,pch=x,col=x)points(x,18-x,pch=x)matplot(x,cbind(x,18-x)2021/6/1698画图画图 spring= spring= data.frame(compression=c(41,

77、39,43,53,42,data.frame(compression=c(41,39,43,53,42,48,47,46),48,47,46),distance=c(120,114,132,157,122,144,137,1distance=c(120,114,132,157,122,144,137,141)41)attach(spring)attach(spring)(Hookes law: f=.5ks)plot(distance compression)plot(compression, distance)2021/6/1699画图画图 par(mfrow=c(2,2)#准准备备画画22

78、的的4个图个图plot(compression, distance,main= Hookes Law) #只有标题只有标题的图的图plot(compression, distance,main= Hookes Law, xlab= x,ylab= y) #标标题题+x,y标标记记identify(compression,distance) #标出点号码标出点号码2021/6/16100画图画图 plot(compression, distance,main=Hookes Law) #只有标题只有标题的图的图text(46,120, f=1/2*k*s)#在在指指定定位写入文字位写入文字plot

79、(compression, distance,main=Hookes Law) #只有标题只有标题的图的图text(locator(2), I am here!) #在在点击的两个位置写入文字点击的两个位置写入文字2021/6/161012021/6/16102画图画图 library(mass);data(Animals);attlibrary(mass);data(Animals);attach(Animals)ach(Animals)plot(body, brain)plot(body, brain)plot(sqrt(body), sqrt(brain)plot(sqrt(body),

80、 sqrt(brain)plot(body)0.1, (brain)0.1)plot(body)0.1, (brain)0.1)plot(log(body),log(brain) plot(log(body),log(brain) 2021/6/161032021/6/16104画图画图 (原始数据原始数据)par(mfrow=c(1,1), pch=1)par(mfrow=c(1,1), pch=1) plot(body, brain, xlim=c(0, 6000)plot(body, brain, xlim=c(0, 6000)text(x=body, text(x=body, y=br

81、ain,labels=row.names(Animals), adj=0)y=brain,labels=row.names(Animals), adj=0)# # adj=0 implies left adjusted textadj=0 implies left adjusted text2021/6/161052021/6/16106画图画图(几个点几个点) plot(bodyc(1,3,8), plot(bodyc(1,3,8), brainc(1,3,8),xlim=c(0,200)brainc(1,3,8),xlim=c(0,200)text(x=bodyc(1,3,8),y=bra

82、inc(1,3,8),labelstext(x=bodyc(1,3,8),y=brainc(1,3,8),labels=row.names(Animals,c(1,3,8), adj=0)=row.names(Animals,c(1,3,8), adj=0)2021/6/161072021/6/16108画图画图 (对数变换后对数变换后)Par(cex=0.7,mex=0.7)Par(cex=0.7,mex=0.7) #character (cex) & margin (mex) #character (cex) & margin (mex) expansionexpansionplot(lo

83、g(body),log(brain)plot(log(body),log(brain)text(x=log(body), text(x=log(body), y=log(brain),labels=row.names(Animals), y=log(brain),labels=row.names(Animals), adj=1.5)# adj=0 implies left adjusted textadj=1.5)# adj=0 implies left adjusted text2021/6/161092021/6/16110画图画图 (按照次序按照次序)plot(log(body),log

84、(brain)plot(log(body),log(brain)identify(log(body),log(brain),row.names(Animalidentify(log(body),log(brain),row.names(Animals)s)2021/6/161112021/6/16112画图画图 plot(1,1,xlim=c(1,7.5),ylim=c(0,5),type=n) plot(1,1,xlim=c(1,7.5),ylim=c(0,5),type=n) # # Do not plot pointsDo not plot pointspoints(1:7,rep(4.

85、5,7),cex=1:7,col=1:7, pch=0:6)points(1:7,rep(4.5,7),cex=1:7,col=1:7, pch=0:6)text(1:7,rep(3.5,7),labels=paste(0:6,letters1:7),cex=1text(1:7,rep(3.5,7),labels=paste(0:6,letters1:7),cex=1:7, col=1:7):7, col=1:7)2021/6/161132021/6/16114画图画图(继续继续) points(1:7,rep(2,7), pch=(0:6)+7) # Plot symbols 7 to 13

86、text(1:7)+0.25, rep(2,7), paste(0:6)+7) # Label with symbol numberpoints(1:7,rep(1,7), pch=(0:6)+14) # Plot symbols 14 to 20text(1:7)+0.25, rep(1,7), paste(0:6)+14) # Labels with symbol number2021/6/161152021/6/16116写函数写函数:中位数和均值的比值函数中位数和均值的比值函数用该函数用该函数计算一万个计算一万个(均值为均值为1的的)指数分指数分布的中位数和均值的比布的中位数和均值的比

87、median.mean.ratio - function(x)return(median(x)/mean(x)z - rexp(10000)median.mean.ratio(z)2021/6/16117函数函数函数之例函数之例: :中位数和均值的比值函数中位数和均值的比值函数用该函数用该函数计算一万个计算一万个( (均值为均值为1 1的的) )指数指数分布的中位数和均值的比分布的中位数和均值的比median.mean.ratio - function(x)return(median(x)/mean(x)z - rexp(10000)median.mean.ratio(z)在函数中的在函数中的

88、中间中间, ,可以有多个语句可以有多个语句; ;语句之间用换行或分号语句之间用换行或分号(;)(;)分开分开.2021/6/16118函数的编辑函数的编辑 fix(median.mean.ratio)fix(median.mean.ratio)这时会出现一个记事本编辑器这时会出现一个记事本编辑器编辑并试图存了之后如果发生错误编辑并试图存了之后如果发生错误( (不会存不会存),),往往会让你编辑改过但有语法错误的往往会让你编辑改过但有语法错误的fix()fix(); ;如果还使用如果还使用fix(median.mean.ratio)fix(median.mean.ratio)则是编则是编辑以前的

89、版本辑以前的版本. .2021/6/16119函数函数函数可以有缺省值函数可以有缺省值, ,例如例如Expo=function(y,x=2)Expo=function(y,x=2)z=yx;zz=yx;zy=seq(0,1,length=100);plot(y,y=seq(0,1,length=100);plot(y,Expo(y),type=l)Expo(y),type=l) 函数可以不写函数可以不写returnreturn, ,这时最后一个这时最后一个值为值为returnreturn的值的值. .为了输出多个值最为了输出多个值最好使用好使用list.list.2021/6/16120颜色画

90、图函数颜色画图函数view.colours = function()view.colours = function()plot(1, 1, xlim=c(0,14), ylim=c(0,3), type=n, axes=F, plot(1, 1, xlim=c(0,14), ylim=c(0,3), type=n, axes=F, xlab=,ylab=)xlab=,ylab=)text(1:6, rep(2.5,6), paste(1:6), col=palette()1:6, text(1:6, rep(2.5,6), paste(1:6), col=palette()1:6, cex=2

91、.5)cex=2.5)text(10, 2.5, Default palette, adj=0)text(10, 2.5, Default palette, adj=0)rainchars = c(R,O,Y,G,B,I,V)rainchars = c(R,O,Y,G,B,I,V)text(1:7, rep(1.5,7), rainchars, col=rainbow(7), text(1:7, rep(1.5,7), rainchars, col=rainbow(7), cex=2.5)cex=2.5)text(10, 1.5, rainbow(7), adj=0)text(10, 1.5,

92、 rainbow(7), adj=0)cmtxt = substring(cm.colors, 1:9,1:9)cmtxt = substring(cm.colors, 1:9,1:9)# Split cm.colors into its 9 characters# Split cm.colors into its 9 characterstext(1:9, rep(0.5,9), cmtxt, col=cm.colors(9), cex=3)text(1:9, rep(0.5,9), cmtxt, col=cm.colors(9), cex=3)text(10, 0.5, cm.colors

93、(9), adj=0)text(10, 0.5, cm.colors(9), adj=0) view.colours()view.colours()2021/6/161212021/6/16122画图画图(继续继续)attach(spring);springattach(spring);springrow.names(spring)=LETTERS1:8 ;springrow.names(spring)=LETTERS1:8 ;springplot(distance,compression)plot(distance,compression)identify(distance,compress

94、ion,row.names(spring)identify(distance,compression,row.names(spring)2021/6/161232021/6/16124画图画图(继续继续)par(mfrow=c(1,2)par(mfrow=c(1,2)plot(x-0:50, y-pi*x2, xlab=Radius, plot(x-0:50, y-pi*x2, xlab=Radius, ylab=expression(Area = pi*r2),type=b)ylab=expression(Area = pi*r2),type=b)plot(x-0:50, y-pi*x2,x

95、lab=Radius, ylab=Area = plot(x-0:50, y options(digits=4) sines ,1 ,2 ,3 ,4 1, 1.564e-01 3.090e-01 4.540e-01 5.878e-01 2, 3.090e-01 5.878e-01 8.090e-01 9.511e-01 3, 4.540e-01 8.090e-01 9.877e-01 9.511e-01 4, 5.878e-01 9.511e-01 9.511e-01 5.878e-01 5, 7.071e-01 1.000e+00 7.071e-01 1.225e-16 6, 8.090e-

96、01 9.511e-01 3.090e-01 -5.878e-01 7, 8.910e-01 8.090e-01 -1.564e-01 -9.511e-01 8, 9.511e-01 5.878e-01 -5.878e-01 -9.511e-01 9, 9.877e-01 3.090e-01 -8.910e-01 -5.878e-0110, 1.000e+00 1.225e-16 -1.000e+00 -2.449e-1611, 9.877e-01 -3.090e-01 -8.910e-01 5.878e-0112, 9.511e-01 -5.878e-01 -5.878e-01 9.511e

97、-0113, 8.910e-01 -8.090e-01 -1.564e-01 9.511e-0114, 8.090e-01 -9.511e-01 3.090e-01 5.878e-0115, 7.071e-01 -1.000e+00 7.071e-01 3.674e-1616, 5.878e-01 -9.511e-01 9.511e-01 -5.878e-0117, 4.540e-01 -8.090e-01 9.877e-01 -9.511e-0118, 3.090e-01 -5.878e-01 8.090e-01 -9.511e-0119, 1.564e-01 -3.090e-01 4.54

98、0e-01 -5.878e-0120, 1.225e-16 -2.449e-16 3.674e-16 -4.898e-162021/6/161322021/6/16133画图画图(继续继续matplot)x - 0:50/50x - 0:50/50matplot(x, outer(x, 1:8, function(x, k) sin(k*pi * x), matplot(x, outer(x, 1:8, function(x, k) sin(k*pi * x), ylim = c(-2,2), type = plobcsSh, main= matplot(,type ylim = c(-2,2

99、), type = plobcsSh, main= matplot(,type = plobcsSh )= plobcsSh )2021/6/161342021/6/16135画图画图(符号和线条类型符号和线条类型)par(mfrow=c(1,1)par(mfrow=c(1,1)plot(1:10,sin(1:10),plot(1:10,sin(1:10),lty=1,pch=2,type=blty=1,pch=2,type=b) )2021/6/16136画图画图(legend)x - seq(-pi, pi, len = 65)x - seq(-pi, pi, len = 65)plot(

100、x, sin(x), type = l, ylim = c(-1.2, 1.8), col = plot(x, sin(x), type = l, ylim = c(-1.2, 1.8), col = 3, lty = 3, lty = 2 2) )points(x, cos(x), pch = 3, col = 4)points(x, cos(x), pch = 3, col = 4)lines(x, tan(x), type = b, lty = lines(x, tan(x), type = b, lty = 1 1, pch = 4, col = 6), pch = 4, col =

101、6)title(legend(., lty = c(2, -1, 1), pch = c(-1,3,4), title(legend(., lty = c(2, -1, 1), pch = c(-1,3,4), merge = TRUE), cex.main = 1.1)merge = TRUE), cex.main = 1.1)legend(-1, 1.9, c(sin, cos, tan), col = c(3,4,6), legend(-1, 1.9, c(sin, cos, tan), col = c(3,4,6), lty = c(lty = c(2 2, , -1-1, , 1 1

102、), pch = c(-1, 3, 4), merge = TRUE, ), pch = c(-1, 3, 4), merge = TRUE, bg=gray90)bg=gray90)2021/6/161372021/6/16138Table和和barplottN - table(Ni - rpois(100, lambda=5);tNtN - table(Ni - rpois(100, lambda=5);tN 0 1 2 3 4 5 6 7 8 9 11 12 0 1 2 3 4 5 6 7 8 9 11 12 1 7 12 14 16 14 19 9 4 2 1 1 1 7 12 14

103、16 14 19 9 4 2 1 1r - barplot(tN, col=gray)r - barplot(tN, col=gray)2021/6/16139Table和和barplotlines(r, tN, type=h, col=red, lwd=2) lines(r, tN, type=h, col=red, lwd=2) #- #- type = h plotting *is* barplottype = h plotting *is* barplot2021/6/16140Table和和barplotbarplot(tN, space = 1.5, axisnames=FALSE

104、, sub = barplot(tN, space = 1.5, axisnames=FALSE, sub = barplot(., space=0, axisnames = FALSE)barplot(., space=0, axisnames = FALSE)# #如如space=1.5space=1.5则有则有稀牙缝稀牙缝2021/6/16141Table和和piepie(tN)pie(tN)2021/6/16142画图画图(boxplot)par(mfrow=c(2,1)data(faithful) # read in data set names(faithful) attach(f

105、aithful) # to access the names aboveboxplot(waiting,main=Waiting time,horizontal=TRUE)boxplot(eruptions, main=Eruptions,horizontal=TRUE)detach(faithful) # tidy uppar(mfrow=c(1,1)2021/6/16143画图画图(boxplot)data(ToothGrowth)data(ToothGrowth)boxplot(len dose, data = ToothGrowth, boxwex = 0.25, boxplot(le

106、n dose, data = ToothGrowth, boxwex = 0.25, at = 1:3 - 0.2, at = 1:3 - 0.2, subset= supp = VCsubset= supp = VC, col=yellow, , col=yellow, main=Guinea Pigs Tooth Growth, xlab=Vitamin C dose main=Guinea Pigs Tooth Growth, xlab=Vitamin C dose mg, ylab=tooth length, ylim=c(0,35)mg, ylab=tooth length, yli

107、m=c(0,35)boxplot(len dose, data = ToothGrowth, boxplot(len dose, data = ToothGrowth, add = TRUEadd = TRUE, , boxwex = 0.25, at = 1:3 + 0.2, boxwex = 0.25, at = 1:3 + 0.2, subset= supp = OJ,subset= supp = OJ, col=orange) col=orange) legend(2, 9, c(Ascorbic acid, Orange juice), fill = legend(2, 9, c(A

108、scorbic acid, Orange juice), fill = c(yellow, orange)c(yellow, orange)作了两个图叠加作了两个图叠加, ,一个为一个为subset= supp = “VC“subset= supp = “VC“, ,另一个为另一个为subset= subset= supp = ”OJ“supp = ”OJ“. .数据数据ToothGrowthToothGrowth有两个数量变量有两个数量变量(len,dose)(len,dose)和一个属和一个属性变量性变量(supp);(supp);对每个对每个supp,dosesupp,dose各有三个值

109、各有三个值( (各形成三个盒形图各形成三个盒形图). len ). len dose dose意味着意味着boxbox为为lenlen所做所做. .2021/6/161442021/6/16145画图画图(qq图图)par(mfrow=c(1,3)par(mfrow=c(1,3)y - rt(200, df = 5)y - rt(200, df = 5)qqnorm(y); qqline(y, col = 2) qqnorm(y); qqline(y, col = 2) # #和正态分布比和正态分布比qqplot(y, rt(300, df = 5); qqplot(y, rt(300, df

110、 = 5); # #和和t(5)t(5)分布比分布比data(precip)data(precip)qqnorm(precip, ylab = “Precipitation in/yr for 70 US qqnorm(precip, ylab = “Precipitation in/yr for 70 US cities”); qqline(precip,col=3) cities”); qqline(precip,col=3) # #和正态分布比和正态分布比par(mfrow=c(1,1)par(mfrow=c(1,1)2021/6/16146画图画图(pairs)data(iris)da

111、ta(iris)pairs(iris1:4, main = Andersons Iris Data pairs(iris1:4, main = Andersons Iris Data - 3 species, pch = 21, bg = c(red, - 3 species, pch = 21, bg = c(red, green3, blue)codes(iris$Species)green3, blue)codes(iris$Species)#iris#iris为为1501505 5数据数据, ,这里是这里是4 4个数量变量的点图个数量变量的点图( (最后一个是分最后一个是分类变量类变量

112、(iris$Species)(iris$Species) )2021/6/161472021/6/16148画图画图(stars)data(mtcars)data(mtcars)stars(mtcars, 1:7, key.loc = c(14, 1.5), stars(mtcars, 1:7, key.loc = c(14, 1.5), main = Motor Trend Cars : full main = Motor Trend Cars : full stars(),flip.labels=FALSE)stars(),flip.labels=FALSE)#mtcars#mtcars为

113、为32321111数据数据, ,这里只选前这里只选前7 7个数量变量的点图个数量变量的点图2021/6/161492021/6/16150画图画图(persp)x - seq(-10, 10, length= 30)x - seq(-10, 10, length= 30) y - x y - x f - function(x,y) r - sqrt(x2+y2); f - function(x,y) r - sqrt(x2+y2); 10 * sin(r)/r 10 * sin(r)/r z - outer(x, y, f) z - outer(x, y, f) zis.na(z) - 1 z

114、is.na(z) - 1persp(x, y, z, theta = 30, phi = 30, expand = persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = lightblue)0.5, col = lightblue)2021/6/161512021/6/16152画图画图(persp)data(volcano)data(volcano)z - 2 * volcano# Exaggerate the reliefz - 2 * volcano# Exaggerate the reliefx - 10 * (1:nrow(

115、z) #10 meter spacing(S to x - 10 * (1:nrow(z) #10 meter spacing(S to N)N)y - 10 * (1:ncol(z) #10 meter spacing(E to y - 10 * (1:ncol(z) #10 meter spacing(E to W)W)# Dont draw the grid lines : border = NA# Dont draw the grid lines : border = NApar(bg = slategray)par(bg = slategray)persp(x, y, z, thet

116、a = 135, phi = 30, col = persp(x, y, z, theta = 135, phi = 30, col = green3, scale = FALSE,green3, scale = FALSE,ltheta = -120, shade = 0.75, border = NA, box ltheta = -120, shade = 0.75, border = NA, box = FALSE)= FALSE)par(bg= white)par(bg= white)#mtcars#mtcars为为87876161数据数据, ,作为高度作为高度z.z.2021/6/1

117、61532021/6/16154画图画图(contour)x - y - seq(-4*pi, 4*pi, len = 27)x - y - seq(-4*pi, 4*pi, len = 27) r - sqrt(outer(x2, y2, +) r - sqrt(outer(x2, y2, +)opar - par(mfrow = c(2, 2), mar = rep(0, 4)opar - par(mfrow = c(2, 2), mar = rep(0, 4) for(f in pi(0:3) contour(cos(r2)*exp(- for(f in pi(0:3) contour(

118、cos(r2)*exp(-r/f),r/f),drawlabels = FALSE, axes = FALSE, frame = drawlabels = FALSE, axes = FALSE, frame = TRUE)TRUE)2021/6/161552021/6/16156画图画图(contour)data(volcano)data(volcano)rx - range(x - 10*1:nrow(volcano)rx - range(x - 10*1:nrow(volcano)ry - range(y - 10*1:ncol(volcano)ry - range(y - 10*1:n

119、col(volcano)ry - ry + c(-1,1) * (diff(rx) - diff(ry)/2ry - ry + c(-1,1) * (diff(rx) - diff(ry)/2tcol - terrain.colors(12)tcol - terrain.colors(12)par(opar); opar - par(pty = s, bg = lightcyan)par(opar); opar - par(pty = s, bg = lightcyan)plot(x = 0, y = 0,type = n, xlim = rx, ylim = ry, xlab plot(x

120、= 0, y = 0,type = n, xlim = rx, ylim = ry, xlab = , ylab = )= , ylab = )u - par(usr)u - par(usr)rect(u1, u3, u2, u4, col = tcol8, border = rect(u1, u3, u2, u4, col = tcol8, border = “red”) “red”) #rect#rect画矩形画矩形contour(x, y, volcano, col = tcol2, lty = solid, add contour(x, y, volcano, col = tcol2,

121、 lty = solid, add = TRUE, vfont = c(sans serif, plain)= TRUE, vfont = c(sans serif, plain) title(A Topographic Map of Maunga Whau, font = 4) title(A Topographic Map of Maunga Whau, font = 4)abline(h = 200*0:4, v = 200*0:4, col = lightgray, lty abline(h = 200*0:4, v = 200*0:4, col = lightgray, lty =

122、2, lwd = 0.1);par(opar)= 2, lwd = 0.1);par(opar)2021/6/161572021/6/16158画图画图(image)data(volcano)data(volcano) x - 10*(1:nrow(volcano) x - 10*(1:nrow(volcano) y - 10*(1:ncol(volcano) y - 10*(1:ncol(volcano) image(x, y, volcano, col = image(x, y, volcano, col = terrain.colors(100), axes = FALSE)terrai

123、n.colors(100), axes = FALSE) contour(x, y, volcano, levels = seq(90, contour(x, y, volcano, levels = seq(90, 200, by=5), add = TRUE, col = peru)200, by=5), add = TRUE, col = peru) axis(1, at = seq(100, 800, by = 100) axis(1, at = seq(100, 800, by = 100) axis(2, at = seq(100, 600, by = 100) axis(2, a

124、t = seq(100, 600, by = 100) box() box() title(main = Maunga Whau Volcano, title(main = Maunga Whau Volcano, font.main = 4)font.main = 4)2021/6/161592021/6/16160画图画图(箭头和线段箭头和线段) x=runif(12);y=rnorm(12);I=order(x,y);x=xx=runif(12);y=rnorm(12);I=order(x,y);x=xi;y=yi;plot(x,y, main=arrows(.) and i;y=yi;

125、plot(x,y, main=arrows(.) and segments(.)segments(.)# draw arrows from point to point :# draw arrows from point to point :s=seq(length(x)-1)s=seq(length(x)-1)# one shorter than data# one shorter than dataarrows(xs,ys,xs+1,ys+1,col= 1:3)arrows(xs,ys,xs+1,ys+1,col= 1:3)s=s-length(s);segments(xs,ys, s=s-length(s);segments(xs,ys, xs+2,ys+2,col=pink)xs+2,ys+2,col=pink)第一部分画点第一部分画点, ,第二部分画箭头第二部分画箭头, ,第三部分画线段第三部分画线段postscript(“myfile.ps”)#保存图像到文件保存图像到文件plot(1:10)#画散点图画散点图,不会显示在图形窗口不会显示在图形窗口dev.off()#关闭设备关闭设备2021/6/161612021/6/16162 结束语结束语若有不当之处,请指正,谢谢!若有不当之处,请指正,谢谢!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号