统计建模与R软件-第二讲课件

上传人:29 文档编号:241901744 上传时间:2024-08-04 格式:PPT 页数:150 大小:3.87MB
返回 下载 相关 举报
统计建模与R软件-第二讲课件_第1页
第1页 / 共150页
统计建模与R软件-第二讲课件_第2页
第2页 / 共150页
统计建模与R软件-第二讲课件_第3页
第3页 / 共150页
点击查看更多>>
资源描述
第第2 2章章 R R软件的使用软件的使用郭广报 统计计算第2章R软件的使用郭广报讲解大纲2.1R软件简介2.2数字、字符与向量2.3对象和它的模式与属性2.4因子2.5多维数组和矩阵2.6列表与数据框2.7读写数据文件2.8控制流2.9编写自己的函数2.10图形功能2.11程序打包讲解大纲2.1R软件简介2.1R软件简介R软件是一个开放的统计编程环境,是一种语言,是S语言的一种实现;R软件是完全免费的,http:/www.r-project.org;2.1R软件简介R软件是一个开放的统计编程环境,是一种语言,2.1.1R软件的下载与安装http:/cran.r-project.org下载与安装Demo2.1.1R软件的下载与安装http:/cran.r-pr2.1.2初识R软件例2.1某学校在体检时测得12名女中学生体重X1(kg)和胸围X2(cm)资料如表2.1所示,试计算体重与胸围的均值与标准差。表2.1 学生体检资料学生编号学生编号体重体重X1胸围胸围X2学生编号学生编号体重体重X1胸围胸围X21356074378240748376634064944704427110426553772114173645681239752.1.2初识R软件例2.1某学校在体检时测得12名女中学生2.1.2初识R软件(续)解:#输入体重X1-c(35,40,40,42,37,45,43,37,44,42,41,39)#计算体重的均值和标准差mu1-mean(X1);sigma1-sd(X1)#输入胸围X2-c(60,74,64,71,72,68,78,66,70,65,73,75)#计算胸围的均值和标准差mu2-mean(X2);sigma2-sd(X2);2.1.2初识R软件(续)解:#输入体重2.1.2初识R软件(续)例2.2绘出例2.1中12名学生体重与胸围的散点图和体重的直方图。解:Plot(X1,X2)hist(X1)#绘出体重的直方图hist(X1,probability=TRUE,main=paste(Histogram of,weight),xlab=weight)2.1.2初识R软件(续)例2.2绘出例2.1中12名学生体2.1.2初识R软件(续)例2.3设有文本文件exam0203.txt,其内容与格式参见文件,其中第一行相当于表头,说明变量的属性,即说明各列的内容,如第一列是姓名,第二列是性别,第三列是年龄,第四列是身高(cm),第五列是体重(lb),从第二行到最后一行是变量的内容,试从该文件中读出数据,并对身高和体重作回归分析。2.1.2初识R软件(续)例2.3设有文本文件exam0202.1.2初识R软件(续)解:rt-read.table(exam0203.txt,head=TRUE);rtlm.sol-lm(WeightHeight,data=rt)summary(lm.sol)2.1.2初识R软件(续)解:2.1.3R软件主窗口与快捷方式2.1.3R软件主窗口与快捷方式2.1.3R软件主窗口与快捷方式其它菜单Demo2.1.3R软件主窗口与快捷方式其它菜单Demo2.2数字、字符与向量1、向量的赋值R软件中最简单的运算是向量赋值,有三种形式:xx2.2数字、字符与向量1、向量的赋值2.2.2向量的运算(续)2、向量的运算对于向量可以作加(+)、减(-)、乘(*)、除(/)和乘方()运算,其含义是对向量的每一个元素进行运算,如:x-c(-1,0,2);y-c(3,8,2)v-2*x+y+1;vx*yx/yx2yx5%/%3#整数除法5%3#求余数2.2.2向量的运算(续)2、向量的运算2.2.2向量的运算(续)exp(x)sqrt(y)3 3、与向量运算有关的函数、与向量运算有关的函数(1)求向量的最小值、最大值和范围的函数x s1对于seq函数还有另一种使用方式 seq(length=value2,from=value1,by=value3)s2-seq(length=51,from=-5,by=.2)2.2.2产生有规律的序列1.等差数列a:b2.2.2产生有规律的序列3.重复函数rep()是重复函数它可以将某一向量重复若干次再放入新的变量中如:s-rep(x,times=3)#即将变量重复3倍放在变量s中如x-c(1,4,6.25);xs-rep(x,times=3);s2.2.2产生有规律的序列3.重复函数2.2.3逻辑向量与其它语言一样R软件允许使用逻辑操作当逻辑运算为真返值为TRUE,当逻辑运算为假返值为FALSE.例如x-1:7l3逻辑运算符有,=,=(表示TRUE等于)和TRUE!=(表TRUE示不等TRUE)all(c(1,2,3,4,5,6,7)3)any(c(1,2,3,4,5,6,7)3)2.2.3逻辑向量与其它语言一样R软件允许使用逻辑操作当逻辑2.2.4 缺失数据用NA表示某处的数据缺省缺失如z-c(1:3,NA);z函数is.na()是检测缺失数据的函数,如果返回值为真(TRUE),则说明此数据是确实数据,如果返回值为假(FALSE),则此数据不是缺失数据,如:ind-is.na(z);ind#将缺失数据改为0zis.na(z)-0is.nan(),is.finite()2.2.4缺失数据用NA表示某处的数据缺省缺失如2.2.5 字符型向量向量元素可以字符串值,例如:y-c(er,sdf,dim,haha,good)可用paste函数把它的自变量连成一个字符串,中间用空格分开,例如:paste(My,Job)labs-paste(X,1:6,sep=)paste(result.,1:4,sep=)paste(1:10)#same as as.character(1:10)paste(Today is,date()paste(c(a,b),collapse=.)2.2.5字符型向量向量元素可以字符串值,例如:2.2.6 复数向量R 支持复数运算,复数常量只要用通常的格式,如3.5+2.1i,complex模式的向量为复数元素的向量,可以用complex()函数生成复数向量,如x-seq(-pi,pi,by=pi/10)y z plot(z)lines(z)对于复数运算,Re()是计算复数的实部,Im()是计算复数的虚部,Mod()是计算复数的模,Arg()是计算复数的幅角。2.2.6复数向量R支持复数运算,复数常量只要用通常的格2.2.7向量下标运算R软件提供了十分灵活的访问向量元素和向量子集的功能。向量中的某一个元素可以用xi的格式访问,其中x是一个向量名,或一个取向量值的表达式,如x-c(1,4,7)x2(c(1,3,5)+5)2可以单独改变一个或多个元素的值,如:x2-125xc(1,3)-c(144,169);x2.2.7向量下标运算R软件提供了十分灵活的访问向量元素和向2.2.7向量下标运算1、逻辑向量v为和x等长的逻辑向量,xv表示取出所有v为真值得元素,如:x-c(1,4,7)x5xx5可以将向量中缺失数据赋值为0z-c(-1,1:3,NA)zis.na(z)0=x;x#others,#or2.2.7向量下表运算2、下标的正整数运算v为一个向量,下标取值在1到length(v)之间,取值允许重复,如:v-10:20vc(1,3,5,9)v1:5vc(1,2,3,2,1)#other2.2.7向量下表运算2、下标的正整数运算2.2.7向量下表运算3、下标的负整数运算下标的负整数运算注:表示扣除相应的元素v为一个向量,下标取值在-length(v),到-1之间v-c(1:5)4、取字符型值得下标向量取字符型值得下标向量在定义向量时可以给元素加上名字,如ages-c(Li=33,Zhang=29,Liu=18)#元素可以通过下标和名字来进行访问agesZhang#元素的名字也可以后加fruit-c(5,10,2,20)names(fruit)5)R对象有一种特别的null(空值型)型,只有一个特殊的NULL值为这种类型,表示没有值(不同于NA,NA是一种特殊值,而NULL根本没有对象值)2.3.1固有属性:mode和lengthR对象都有两个基本2.3.1固有属性:mode和length要判断某对象是否某类型,有许多个类似于is.numeric()的函数可以完成 is.numeric(x)用来检验对象x是否为数值型,它返回一个逻辑型结果is.character()可以检验对象是否为字符型,等等如:z-0:9is.numeric(z)is.character(z)长度属性表示R对象元素的个数,比如length(2:4)length(z)2.3.1固有属性:mode和length要判断某对象是否某2.3.1固有属性:mode和lengthR可以强制进行类型转换,例如digits-as.character(z);digitsd-as.numeric(digits);d2.3.1固有属性:mode和lengthR可以强制进行类型2.3.2 修改对象的长度对象可以取0长度或正整数为长度 R允许对超出对象长度的下标赋值,这时对象长度自动伸长以包括此下标,未赋值的元素取缺失值(NA),例如:x-numeric()x3-17;x要增加对象的长度只需作赋值运算就可以了,如x-1:3x-1:4要缩短对象的长度又怎么办呢?只要给它赋一个长度短的子集就可以x-xl:2;xalpha-1:10alpha-alpha2*1:5alpha length(alpha);alpha2.3.2修改对象的长度对象可以取0长度或正整数为长度2.3.3 attributes()和attr()函数attributes(object)返回对象object的各特殊属性组成的列表,不包括固有属性mode和length.例如:x-c(apple=2.5,orange=2.1);xattributes(x)可以用attr(object,name)的形式存取对象object的名为name的属性,例如,attr(x,names)也可以把attr()函数写作赋值的左边以改变属性值或定义新新的属性,例如,attr(x,names)-c(applel,grapes);xattr(x,type)-fruit;xattr(x,type)2.3.3attributes()和attr()函数at2.3.4对象的class属性在R中可以用特殊的class属性来支持面向对象的编程风格,对象的class属性用来区分对象的类,可以写出通用函数根据对象类的不同进行不同的操作,比如,print()函数对于向量和矩阵的显示方法就不同,plot()函数对不同类的自变量作不同的图形。为了暂时去掉一个有类的对象的class属性,可以使用unclass(object)函数。2.3.4对象的class属性在R中可以用特殊的class属2.4因子 统计中的变量有几种重要类别:区间变量、名义变量和有序变量,区间变量取连续的数值,可以进行求和、平均值等运算,名义变量和有序变量取离散值;可以用数值代表,也可以是字符型值,其具体数值没有加减乘除的意义,不能用来计算,而只能用来分类或计数,名义变量如性别、省份、职业,有序变量如班级、名次。2.4因子统计中的变量有几种重要类别:区间变量、名义变量和2.4.1 factor()函数因为离散变量有各种不同表示方法,在R软件中,为了统一起见,使用因子(factor)来表示这种类型的变量,例如,知道5位学生的性别,用因子变量表示sex-c(M,F,M,M,F)sexf -factor(sex);sexf可用函数levels()得到因子的水平,如sex.level-levels(sexf);sex.level对于因子向量可用函数table()来统计各类数据的频数sex.tab-table(sexf);sex.tab2.4.1factor()函数因为离散变量有各种不同表示方2.4.2tapply()函数tapply()函数形式tapply(X,INDEX,FUN=NULL,.,simplify=TRUE)其中X是一对象,通常是一向量,INDEX是与X有同样长度的因子,FUN是需要计算的函数,simplify 是逻辑变量,取为TRUE(缺省)或FALSEheight-c(174,165,180,171,160)tapply(height,sex,mean)2.4.2tapply()函数tapply()函数形式2.4.3gl()函数gl(n,k,length=n*k,labels=1:n,ordered=FALSE)其中n为水平数,k为重复的次数,length为结果的长度,labels是一个n维向量,表示因子水平,ordered是逻辑变量,表示是否为有序因子,缺省值为FALSEgl(3,5)gl(3,1,15)2.4.3gl()函数gl(n,k,length=n2.5 多维数组和矩阵2.5.1 生成数组或矩阵数组(array)可以看成是带多个下标的类型相同的元素的集合,常用的是数值型的数组如矩阵,也可以有其它类型(如字符型、逻辑型、复数型)R可以很容易地生成和处理数组,特别是矩阵(二维数组)数组有一个特征属性叫做维数向量(dim属性),维数向量是一个元素取正整数值的向量,其长度是数组的维数,比如维数向量有两个元素时数组为二维数组(矩阵)维数向量的每一个元素指定了该下标的上上界界,下标的下界总为12.5多维数组和矩阵2.5.1生成数组或矩阵2.5.1 生成数组或矩阵1将向量定义成数组向量只有定义了维数向量(dim属性)后才能被看作是数组,比如:z-1:12dim(z)-c(3,4)注意:矩阵的元素是按列存放的,也可以把向量定义为一维数组,例如:dim(z)-122.5.1生成数组或矩阵1将向量定义成数组2.5.1 生成数组或矩阵 2用array()函数构造多维数组 R软件可以用array()函数直接构造数组,其构造形式为array(data=NA,dim=length(data),dimnames=NULL)其中data是一个向量数据,dim是数组各维的长度,缺省时为原向量的长度dimnames是数组维的名字,缺省时为空,如 x-array(1:20,dim=c(4,5)产生一个4x5的二维数组(矩阵)2.5.1生成数组或矩阵2用array()函数构造多2.5.1 生成数组或矩阵另一种方式为z-array(0,dim=c(3,4,2)它定义了一个3*4*2的三维数组,其元素均为0这种方法常用来对数组作初始化3用matrix()函数构造矩阵 函数matrix()是构造矩阵(二维数组)的函数,其构造形式为 matrix(data=NA,nrow=l,ncol=l,byrow=FALSE,dimnames=NULL)2.5.1生成数组或矩阵另一种方式为2.5.1 生成数组或矩阵其中data是一个向量数据,nrow是矩阵的行数,ncol是矩阵的列数,当byrow=TRUE时,生成矩阵的数据按行放置,缺省时相当于byrow=FALSE,数据按列放置 dimnames是数组维的名字,缺省时为空,如构造一个3x5阶的矩阵A-matrix(1:15,nrow=3,ncol=5,byrow=TRUE)2.5.1生成数组或矩阵其中data是一个向量数据,nr2.5.2 数组下标数组与向量一样,可以对数组中的某些元素进行访问,或进行运算。1数组下标 要访问数组的某个元素,只要写出数组名和方括号内的用逗号分开的下标即可,如a2,1,2如 a-1:24 dim(a)-c(2,3,4)a2,1,22.5.2数组下标数组与向量一样,可以对数组中的某些元素2.5.2 数组下标更进一步还可以在每一个下标位置写一个下标向量,表示这一维取出所有指定下标的元素,如a1,2:3,2:3取出所有第一下标为1,第二下标为2或3,第三下标为2或3的元素,如a1,2:3,2:3注意,因为第一维只有一个下标,所以退化了,得到的是一个维数向量为22的数组,另外,如果略写某一维的下标,则表示该维全选,例如,a1,2.5.2数组下标更进一步还可以在每一个下标位置写一个下2.5.2 数组下标a,或a都表示整个数组,比如a-0可以在不改变数组维数的条件下把元素都赋成0还有一种特殊下标办法是对于数组只用一个下标向量(是向量,不是数组),比如a3:10 这时忽略数组的维数信息把表达式看作是对数组的数据向量取子集2.5.2数组下标a,或a都表示整个数组,比如2.5.2 数组下标2不规则的数组下标在R语言中,甚至可以把数组中的任意位置的元素作为数组访问,其方法是用一个二维数组作为数组的下标,二维数组的每一行是一个元素的下标,列数为数组的维数,例如,要把上面的形状为2x3x4的数组a的第1,1,1,2,2,3,1,3,4,2,1,4号共四个元素作为一个整体访问,先定义一个包含这些下标作为行的二维数组:b-matrix(c(1,1,1,2,2,3,1,3,4,2,1,4),ncol=3,byrow=T)ab注意取出的是一个向量,我们还可以对这几个元素赋值,如:ab-c(101,102,103,104)或ab-02.5.2数组下标2不规则的数组下标2.5.3 数组的四则运算可以对数组之间进行四则运算(+、一、*、),这时进行的是数组对应元素的四则运算,参加运算的数组一般应该是相同形状的(dim属性完全相同)例如:A-matrix(1:6,nrow=2,byrow=T);AB-matrix(1:6,nrow=2);BC -matrix(c(1,2,2,3,3,4),nrow=2);CD-2*C+A/B;D2.5.3数组的四则运算可以对数组之间进行四则运算(+、2.5.3 数组的四则运算形状不一致的向量(或数组)也可以进行四则运算,一般的规则是将向量(或数组)中的数据与对应向量(或数组)中的数据进行运算,把短向量(或数组)的数据循环使用,从而可以与长向量(或数组)数据进行匹配,并尽可能保留共同的数组属性,例如,x1-c(100,200)x2-1:6x1+x2x3-matrix(1:6,nrow=3)x1+x32.5.3数组的四则运算形状不一致的向量(或数组)也可以2.5.4 矩阵的运算1转置运算对于矩阵A,函数t(A)表示矩阵4的转置,即AT.如A-matrix(1:6,nrow=2);A2求方阵的行列式函数det()是求方阵行列式的值,如det(matrix(1:4,ncol=2)2.5.4矩阵的运算1转置运算2.5.4 矩阵的运算 3向量的内积对于n维向量x,可以看成n*l阶矩阵或1*n阶矩阵,若x与y是相同维数的向量,则x%*%y表示x与y作内积例如,x-1:5;y-2*1:5x%*%y函数crossprod()是内积运算函数(表示交叉乘积),crossprod(x,y)计算向量x与y的内积,即t(x)%*%ycrossprod(x)表示x与y的内积,即|x|22.类似地,tcrossprod(x,y)表示x%*%t(y),即x与y的外积,也称为叉积 tcrossprod(x)表示x与x作外积2.5.4矩阵的运算3向量的内积2.5.4 矩阵的运算 4向量的外积(叉积)设x,y可是n维向量,则x%o%y表示x与y作外积例如,x-1:5;y-2*1:5x%o%y函数outer()是外积运算函数,outer(x,y)计算向量x与y的外积,它等价于x%o%y函数outer()的一般调用格式为:outer(X,Y,FUN=*,.)其中X,Y矩阵(或向量),fun是作外积运算函数,缺省值为乘法运算2.5.4矩阵的运算4向量的外积(叉积)2.5.4 矩阵的运算5矩阵的乘法如果矩阵A和B具有相同的维数,则A*B表示矩阵中对应的元素的乘积,A%*%B表示通常意义下的两个矩阵的乘积(当然要求矩阵A的列数等于矩阵B的行数)如A-array(1:9,dim=(c(3,3)B-array(9:1,dim=(c(3,3)C-A*B;CD-A%*%B;D2.5.4矩阵的运算5矩阵的乘法2.5.4 矩阵的运算由乘法的运算规则可以看出,x%*%A%*%x表示的是二次型 函数crossprod(A,B)表示的是t(A)%*%B,函数tcrossprod(A,B)表示的是A%*%t(B)2.5.4矩阵的运算由乘法的运算规则可以看出,x%*%A2.5.4 矩阵的运算 6生成对角阵和矩阵取对角运算函数diag()依赖于它的变量,当v是一个向量时,diag(v)表示以v的元素为对角线元素的对角阵,当M是一个矩阵时,则diag(M)表示的是取M对角线上的元素的向量,如v-c(1,4,5)diag(v)M-array(1:9,dim=c(3,3)diag(M)2.5.4矩阵的运算6生成对角阵和矩阵取对角运算2.5.4 矩阵的运算7解线性方程组和求矩阵的逆矩阵若求解线性方程组Ax=b,其命令形式为so1ve(A,b),求矩阵A的逆,其命令形式为so1ve(A)A-t(array(c(1:8,10),dim=c(3,3)b-c(1,1,1)x-solve(A,b);xB-solve(A);B2.5.4矩阵的运算7解线性方程组和求矩阵的逆矩阵2.5.4 矩阵的运算8求矩阵的特征值与特征向量函数eigen(Sm)是求对称矩阵Sm的特征值与特征向量,其命令形式为ev-eigen(Sm)则ev存放着对称矩阵Sm特征值和特征向量,是由列表形式给出的(有关列表的概念见2.6节),其中ev$values是Sm的特征值构成的向量,ev$vectors是Sm的特征向量构成的矩阵,如Sm-crossprod(A,A)ev-eigen(Sm);ev2.5.4矩阵的运算8求矩阵的特征值与特征向量2.5.5 与矩阵(数组)运算有关的函数1取矩阵的维数函数dim(A)得到矩阵A的维数,函数nrow(A)得到矩阵A的行数,函数ncol(A)得到矩阵A的列数,如A-matrix(1:6,nrow=2);Adim(A)nrow(A)ncol(A)2.5.5与矩阵(数组)运算有关的函数1取矩阵的维数2.5.5 与矩阵(数组)运算有关的函数 2矩阵的合并 函数cbind()把其自变量横向拼成一个大矩阵,rbind()把其自变量纵向拼成一个大矩阵,cbind()的自变量是矩阵或看作列向量的向量时,自变量的高度应该相等,rbind()的自变量是矩阵或看作行向量的向量时,自变量的宽度应该相等,如果参与合并的自变量比其变量短,则循环补足后合并如 x1-rbind(c(1,2),c(3,4);x1x2-10+x1x3-cbind(x1,x2);x3x4-rbind(x1,x2);x4cbind(1,x1)2.5.5与矩阵(数组)运算有关的函数2矩阵的合并2.5.5 与矩阵(数组)运算有关的函数3矩阵的拉直设A是一个矩阵,则函数as.vector(A)就可以将矩阵转化为向量,如A-matrix(1:6,nrow=2);Aas.vector(A)4数组的维名字数组可以有一个属性dimnames保存各维的各个下标的名字,缺省时为NULL.如X-matrix(1:6,ncol=2,dimnames=list(c(lone,two,three),c(First,Second),byrow=T);X2.5.5与矩阵(数组)运算有关的函数3矩阵的拉直2.5.5 与矩阵(数组)运算有关的函数也可以先定义矩阵x然后再为dimnames(X)赋值,例如,X-matrix(1:6,ncol=2,byrow=T)dimnames(X)-list(c(one,two,three),c(First,Second)对于矩阵,还可以使用属性rownames和colnames来访问行名与列名,例如,X-matrix(1:6,ncol=2,byrow=T)colnames(X)-c(First,Second)rownames(X)-c(one,two,three)2.5.5与矩阵(数组)运算有关的函数也可以先定义矩阵x2.5.5 与矩阵(数组)运算有关的函数5数组的广义转置可以用aperm(A,perm)函数把数组A的各维按perm中指定的新次序重新排列,例如,A-array(1:24,dim=c(2,3,4)B-aperm(A,c(2,3,1)结果B把A的第2维移到了第1维,A的第3维移到了第2维,A的第1维移到了第三维,这时有Bi,j,k=Aj,k,i对于矩阵A,aperm(A,c(2,1)恰好是矩阵转置,即t(A)2.5.5与矩阵(数组)运算有关的函数5数组的广义转置2.5.5 与矩阵(数组)运算有关的函数6apply函数对于向量,可以用sum、mean等函数对其进行计算,对于数组(矩阵),如果想对其一维(或若干维)进行某种计算,可用apply函数,其一般形式为apply(A,MARGIN,FUN,.)其中A为一个数组,MARGIN是固定哪些维不变,FUN是用来计算的函数,如A-matrix(1:6,nrow=2);Aapply(A,1,sum)apply(A,2,mean)2.5.5与矩阵(数组)运算有关的函数6apply函数2.6 列表与数据框1列表的构造列表是一种特别的对象集合,它的元素也由序号(下标)区分,但是各元素的类型可以是任意对象,不同元素不必是同一类型,元素本身允许是其它复杂数据类型,比如,列表的一个元素也允许是列表,下面是如何构造列表的例子lst-list(name=c(Fred,wife,Mary),no.children=3,child.ages=c(4,7,9)列表元素总可以用“列表名下标”的格式引用,例如,lst2lst322.6列表与数据框1列表的构造2.6 列表与数据框但是,列表不同于向量,我们每次只能引用一个元素,如lst1:2的用法是不允许的注意:“列表名下标”或“列表名下标范围”的用法也是合法的,但其意义与用两重括号的记法完全不同,两重记号取出列表的一个元素,结果与该元素类型相同,如果使用一重括号,则结果是列表的一个子列表(结果类型仍为列表)在定义列表时如果指定了元素的名字(如lst中的name,wife,nochildren,child.ages),则引用列表元素还可以用它的名字作为下标,格式为“列表名元素名,如lstnamelstchild.ages2.6列表与数据框但是,列表不同于向量,我们每次只能引用2.6 列表与数据框另一种格式是“列表名$元素名”,如lst$namelst$child.ages构造列表的一般格式为lst-list(name_l=object_l,name_m=object_m)其中name是列表元素的名称,object是列表元素的对象2.6列表与数据框另一种格式是“列表名$元素名”,如2.6 列表与数据框2列表的修改列表的元素可以修改,只要把元素引用赋值即可,如将Fred改成John.lst$name-John如果需要增加一项家庭收入,夫妻的收入分别是1980和1600,则输入lst$income-c(1980,1600)如果要删除列表的某一项,则将该项赋空值(NULL)几个列表可以用连接函数c()连接起来,结果仍为一个列表,其元素为各自变量的列表元素,如list.ABC-c(list.A,list.B,list.C)2.6列表与数据框2列表的修改2.6 列表与数据框3返回值为列表的函数在R中,有许多函数的返回值是列表,如求特征值特征向量的函数eigen(),奇异值分解函数svd()和最小二乘函数数lsfit()等2.6列表与数据框3返回值为列表的函数2.6.2 数据框(data.frame)数据框是R的一种数据结构,它通常是矩阵形式的数据,但矩阵各列可以是不同类型的,数据框每列是一个变量,每行是一个观测但是,数据框有更一般的走义,它是一种特殊的列表对象,有一个值为data.frame的class属性,各列表成员必须是向量(数值型、字符型、逻辑型)、因子、数值型矩、列表,或其它数据框,向量、因子成员为数据框提供一个变量,如果向量非数值型会被强制转换为因子,而矩阵、列表、数据框这样的成员为新数据框提供了和其列数、成员数、变量数相同个数的变量,作为数据框变量的向量、因子或矩阵必须具有相同的长度(行数)2.6.2数据框(data.frame)数据框是R的一种2.6.2 数据框(data.frame)尽管如此,一般还是可以把数据框看作是一种推广了的矩阵,它可以用矩阵形式显示,可以用对矩阵的下标引用方法来引用其元素或子集1数据框的生成数据框可以用data.frame()函数生成,其用法与list()函数相同,各自变量变成数据框的成分,自变量可以命名,成为变量名,例如2.6.2数据框(data.frame)尽管如此,一般还2.6.2 数据框(data.frame)df-data.frame(Name=c(Alice,Becka,James,Jeffrey,John),Sex=c(F,F,M,M,M),Age=c(13,13,12,13,12),Height=c(56.5,65.3,57.3,62.5,59.0),Weight=c(84.0,98.0,83.0,84.0,99.5);df2.6.2数据框(data.frame)df-data2.6.2 数据框(data.frame)如果一个列表的各个成分满足数据框成分的要求,它可以用as.data.frame()函数强制转换为数据框,比如,lst-list(Name=c(Alice,Becka,James,Jeffrey,John),Sex=c(F,F,M,M,M),Age=c(13,13,12,13,12),Height=c(56.5,65.3,57.3,62.5,59.0),Weight=c(84.0,98.0,83.0,84.0,99.5);lst#则as.data.frame(lst)是与df相同的数据框as.data.frame(lst)2.6.2数据框(data.frame)如果一个列表的各2.6.2 数据框(data.frame)一个矩阵可以用data.frame()转换为一个数据框,如果它原来有列名则其列名被作为数据框的变量名;否则系统自动为矩阵的各列起一个变量名,如X-array(1:6,c(2,3)data.frame(X)2数据框的引用引用数据框元素的方法与引用矩阵元素的方法相同,可以使用下标或下标向量,也可以使用名字或名字向量,如df1:2,3:52.6.2数据框(data.frame)一个矩阵可以用d2.6.2 数据框(data.frame)数据框的各变量也可以用按列表引用(即用双括号或$符号引用)如dfHeightdf$Weight数据框的变量名由属性names定义,此属性一定是非空的,数据框的各行也可以定义名字,可以用rownames属性定义,如names(df)rownames(df)-c(one,two,three,four,five)df2.6.2数据框(data.frame)数据框的各变量也75可编辑75可编辑2.6.2 数据框(data.frame)3attach()函数数据框的主要用途是保存统计建模的数据R的统计建模功能都需要以数据框为输入数据,我们也可以把数据框当成一种矩阵来处理,在使用数据框的变量时可以用“数据框名$变量名”的记法,但是,这样使用较麻烦,R提供了attach()函数可以把数据框中的变量“连接”到内存中,这样便于数据框数据的调用,例如,attach(df)r-Height/Weight;r2.6.2数据框(data.frame)3attach2.6.2 数据框(data.frame)后一语句将在当前工作空间建立一个新变量r,它不会自动进入!要把新变量赋值到数据框中,可以用df$r一Height/Weight这样的格式,为了取消连接,只要调用detach()(无参数即可)attach()除了可以连接数据框,也可以连接列表2.6.2数据框(data.frame)后一语句将在当前2.6.3列表与数据框的编辑如果需要对列表或数据框中的数据进行编辑,也可调用函数edit()进行编辑、修改,其命令格式为dfnew-edit(df)其中xold是原列表或数据框图,xnew是修改后的列表或数据框,注意:原数据xold并没有改动,改动的数据存放在xnew中,函数edit()也可以对向量,数组或矩阵类型的数据进行修改或编辑.2.6.3列表与数据框的编辑如果需要对列表或数据框中的数据进2.7读、写数据文件在应用统计学中,数据量一般是比较大的,变量也很多,如果用上述方法来建立数据集,是不可取的,上述方法适用于少量数据、少量变量的分析,对于大量数据和变量,一般应在其他软件中输入(或数据来源是其他软件的输出结果),再读到R中处理 R软件有多种读数据文件的方法。另外,所有的计算结果也不应只在屏幕上输出,应当保存在文件中,以备使用。2.7读、写数据文件在应用统计学中,数据量一般是比较大的,变2.7.1 读纯文本文件读纯文本文件有两个函数,一个是read.table()函数,另一个是scan()函数1read.table()函数read.table()函数是读表格形式的文件,若“住宅”数据已经输入一个纯文本文件”houses.data”中,其格式如下:其中第一其中第一行为变量行为变量名,第一名,第一列为记录列为记录序号序号2.7.1读纯文本文件读纯文本文件有两个函数,一个是re2.7.1 读纯文本文件利用read.table()函数可读入数据,如rt-read.table(houses.data)此时变量rt是一个数据框,其形式与纯文本文件“houses.data”格式相同,我们对它进行测试,得到is.data.frame(rt)2.7.1读纯文本文件利用read.table()函数可2.7.1 读纯文本文件如果数据文件中没有第一列记录序号,如则相应的命令改为rt-read.table(houses2 2.data,header=TRUE)在rt会自动加上记录序号2.7.1读纯文本文件如果数据文件中没有第一列记录序号,2.7.1 读纯文本文件read.table函数的格式:read.table(file,header=FALSE,sep=,quote=,dec=.,row.names,col.names,as.is=!stringsAsFactors,na.strings=NA,colClasses=NA,nrows=-1,skip=0,check.names=TRUE,fill=!blank.lines.skip,strip.white=FALSE,blank.lines.skip=TRUE,comment.char=#,allowEscapes=FALSE,flush=FALSE,stringsAsFactors=default.stringsAsFactors(),fileEncoding=,encoding=unknown)2.7.1读纯文本文件read.table函数的格式:2.7.1 读纯文本文件2scan()函数scan()函数可以直接读纯文本文件数据,例如,有15名学生的体重数据已经输入一个纯文本文件weight.data中,其格式如下则w-scan(weight.data)将文件中的15个数据读入,并赋给向量w2.7.1读纯文本文件2scan()函数则2.7.1 读纯文本文件假设数据中有不同的属性,如下面是100名学生的身高和体重的数据,放在纯文本数据文件”h_w.data”,其中第1、3、5、7、9列是身高(cm),第2、4、6、8、10列是体重(kg),则inp一scan(h_w.data,list(height=0,weight=0)将数据读入,并以列表的方式赋给变量inp.2.7.1读纯文本文件假设数据中有不同的属性,如下面是12.7.1 读纯文本文件可以将由scan()读入的数据存放成矩阵形式,如果将“weight.data”中的体重数据放在一个3行5列的矩阵中,而且数据按行放置,其命令格式为X-matrix(scan(weight.data,0),nrow=3,ncol=5,byrow=TRUE)2.7.1读纯文本文件可以将由scan()读入的数据存放2.7.1 读纯文本文件scan(file=,what=double(),nmax=-1,n=-1,sep=,quote=if(identical(sep,n)else,dec=.,skip=0,nlines=0,na.strings=NA,flush=FALSE,fill=FALSE,strip.white=FALSE,quiet=FALSE,blank.lines.skip=TRUE,multi.line=TRUE,comment.char=,allowEscapes=FALSE,fileEncoding=,encoding=unknown)2.7.1读纯文本文件scan(file=,w2.7.2 读其它格式的数据文件R软件除了可以读纯文本文件外,还可以读其他统计软件格式的数据,如Minitab、S-PLUS、SAS、SPSS等,要读入其他格式数据库,必须先调入”foreign”模块,它不属于R的内在模块,需要在使用前调入,调入的方法很简便,只需键入命令:library(foreign)或用2.1.3节介绍的载入程序包调入。2.7.2读其它格式的数据文件R软件除了可以读纯文本文件2.7.2 读其它格式的数据文件已知数据由表2.2所示,分别存成SPSS数据文件(”educ_scoressav)、SAS数据文件(educ_scores.xpt)、S-PLUS数据文件(educ_scores)和Stata数据文件(educ_scores.dta).读SPSS文件的格式是:rs-read.spss(educ_scores.sav)其变量rs是一个列表,如果打算形成数据框,则命令格式为rs-read.spss(educ_scores.sav,to.data.frame=TRUE)2.7.2读其它格式的数据文件已知数据由表2.2所示,分2.7.2 读其它格式的数据文件读SAS文件的格式是:rx-read.xport(educ_scores.xpt)其变量rx读S-PLUS文件的格式是:rs-read.S(educ_scores)其变量rs是一个数据框。读Stata文件的格式是:rd-read.dta(educ_scores.dta)其变量rd是一个数据框。是一个数据框。2.7.2读其它格式的数据文件读SAS文件的格式是:2.7.2 读其它格式的数据文件2读Excel数据文件将上述数据存为Excel表(”educ_scores.xls”),但R软件无法直接读Excel表,需要将Excel表进入转化成其他格式,然后才能被R软件读出。第一种转化格式是将Excel表转化成“文本文件(制表符分隔)”文件,Demo用函数read.delim()读该文本文件,即rdread.delim(educ_scores.txt)得到的变量rd是一个数据框2.7.2读其它格式的数据文件2读Excel数据文件2.7.2 读其它格式的数据文件第二种转化格式是将Excel表转化成“CSV(逗号分隔)”文件,操作演示,用函数read.csv()读该文本文件,即rc-read.csv(educ_scores.csv)得到的变量rc是一个数据框。2.7.2读其它格式的数据文件第二种转化格式是将Exce2.7.3 链接嵌入的数据库R软件中提供了50多个数据库和其他可利用的软件包,可以用data()函数调用这些数据库与软件包,用data()命令,列出在基本软件包(base)所有可利用的数据集,如果装载某一个数据集,只需在括号中加入相应的名字,如data(infert)2.7.3链接嵌入的数据库R软件中提供了50多个数据库和2.7.3 链接嵌入的数据库如果需要从其他的软件包链接数据,可以使用参数package,例如,data(package=nlme)data(Assay,package=nlme)如果一个软件包已被library附加在库中,则这个数据库将自动地被包含在其中,如library(nlme)data()data(Assay)Assay2.7.3链接嵌入的数据库如果需要从其他的软件包链接数据2.7.4 写数据文件1write()函数write()函数写数据文件的格式是write(x,file=data,ncolumns=if(is.character(x)1 else 5,append=FALSE,sep=)其中x是数据,通常是矩阵,也可以是向量。file是文件名(缺省时文件名为”data”)append=TRUE时,在原文件上填加数据;否则(FALSE,缺省值)写一个新文件,其它参数见帮助文件。2.7.4写数据文件1write()函数2.7.4 写数据文件df-data.frame(Name=c(Alice,Becka,James,jeffrey,John),Age=c(13,13,12,13,12),Height=c(56.5,65.3,57.3,62.5,59.0),Weight=c(84.0,98.0,83.0,84.0,99.5)write.table(df,file=foo.txt)write.csv(df,file=foo.csv)2.7.4写数据文件df-data.frame(2.7.4 写数据文件write.table(x,file=,append=FALSE,quote=TRUE,sep=,eol=n,na=NA,dec=.,row.names=TRUE,col.names=TRUE,qmethod=c(escape,double),fileEncoding=)write.csv(.)write.csv2(.)write.csv uses.for the decimal point and a comma for the separator.write.csv2 uses a comma for the decimal point and a semicolon for the separator,the Excel convention for CSV files in some Western European locales.2.7.4写数据文件write.table(x,fil2.8控制流R是一个表达式语言,其任何一个语句都可以看成是一个表达式,表达式之间以分号分隔或用换行分隔,表达式可以续行,只要前一行不是完整表达式(比如末尾是加减乘除等运算符,或有未配对的括号)则下一行为上一行的继续。若干个表达式可以放在一起组成一个复合表达式,作为一个表达式使用,组合用花括号“”表示。R语言也提供了其它高级程序语言共有的分支、循环等程序控制结构。2.8控制流R是一个表达式语言,其任何一个语句都可以看成是一2.8.1 分支语句分支语句有ifelse语句、switch语句 1ifelse语句 ifelse语句是分支语句中主要的语句,ifelse语句的格式为 if(cond)statement_l if(cond)statement_l else statement_2第一句的意义是:如果条件cond成立,则执行表达式statement_l;否则跳过,第二句的意义是:如果条件cond成立,则执行表达式statement_l;否则执行表达式statement_2.2.8.1分支语句分支语句有ifelse语句、swit2.8.1 分支语句例如,x-c(2,3,1)if(any(x=0)y-log(1+x)else y-log(x)注意:此命令与下面的命令y-if(any(x=0)log(1+x)else log(x)等价,2.8.1分支语句例如,2.8.1 分支语句对于ifelse语句,还有下面的用法 if (cond_l)statement_l else if (cond_2)statement_2 else if (cond_3)statement_3 else statement_42.8.1分支语句对于ifelse语句,还有下面的用法2.8.1 分支语句2switch语句switch语句是多分支语句,其使用方法是switch(statement,list)其中statement是表达式,list是列表,可以用有名定义,如果表达式的返回值在1到length(list),则返回列表相应位置的值;否则返回“NULL”值,例如,x-3switch(x,2+2,mean(1:10),rnorm(4)switch(2,2+2,mean(1:10),rnorm(4)w-switch(6,2+2,mean(1:10),rnorm(4)w2.8.1分支语句2switch语句2.8.1 分支语句当list是有名定义时,statement等于变量名时,返回变量名对应的值;否则返回“NULL”值,例如,y-fruit1switch(y,fruit=banana,vegetable=broccoli,meat=beef)2.8.1分支语句当list是有名定义时,stateme2.8.2 中止语句与空语句中止语句是break语句,break语句的作用是中止循环,使程序跳到循环以外,空语句是next语句,next语句是继续执行,而不执行某个实质性的内容,关于break语句和next话句的例子,将结合循环语句来说明2.8.2中止语句与空语句中止语句是break语句,2.8.3循环语句循环语句有for循环、while循环和repeat循环语句1for循环语句for循环的格式为for(name in expr_l)expr_2其中name是循环变量,expr_l是一个向量表达式(通常是个序列,如1:20),expr_2通常是一组表达式。如构造一个4阶的Hilbert矩阵:n-4;x-array(0,dim=c(n,n)for(i in 1:n)for(j in 1:n)x i,j-1/(i+j-1)x2.8.3循环语句循环语句有for循环、while循环和re2.8.3循环语句2while循环语句while循环语句while语句的格式为while(condition)expr当条件condition成立,则执行表达式expr.例如,编写一个计算1000以内的Fibonacci数f-c(1,1)f1-1;f2-1;i-1while(fi+fi+11000)fi+2-fi+fi+1 i-i+1;f2.8.3循环语句2while循环语句2.8.3循环语句3.repeat循环语句repeat语句的格式为:repeat exprrepeat循环依赖break语句跳出循环,例如,用repeat循环编写一个计算1000以内的Fibonacci数的程序.f-1;f2-1;i-1repeatfi+2-fi+fi+1i=1000)breakf2.8.3循环语句3.repeat循环语句2.9 编写自己的函数R软件允许用户自己创建模型的目标函数,有许多R函数存贮为特殊的内部形式,并可以被进一步的调用,这样在使用时可以使语言更有力、更方便,而且程序也更美观,学习写自己的程序是你学习使用R语言的主要方法之一,事实上,R系统提供的绝大多数函数,如mean(),var(),postscript()等,是系统编写人员写在R语言中的函数,与你自己写的函数本质上没有多大差别。2.9编写自己的函数R软件允许用户自己创建模型的目标函数2.9 编写自己的函数函数定义的格式如下,name-function(arg_1,arg_2,.)expressionexpression是R中的表达式(通常是一组表达式),arg_1,arg_2,表示函数的参数,表达式中,放在程序最后的信息是函数的返回值,返回值可以是向量、数组(矩阵)、列表或数据框。调用函数的格式为name(expr_1,expr_2,),并且在任何时调用都是合法的。在调用自己编写的函数(程序)时,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!