R语言的基本数据结构课件_第1页
R语言的基本数据结构课件_第2页
R语言的基本数据结构课件_第3页
R语言的基本数据结构课件_第4页
R语言的基本数据结构课件_第5页
已阅读5页,还剩103页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二讲R语言的基本数据结构第二讲R语言的基本数据结构1NameIDTeam.NumDutyGrade1Grade2Grade3Grade4Grade5WangN2007091captainNANANANANATangMJ2007201memberNANANANANA………………………作业1:按下面表格的形式生成本组信息的数据框,并提交原程序.Name为字符型、ID为数字型、Team.Num为分组因子、Duty为分组因子、Grade1-5为数值型NameIDTeam.NumDutyGrade1Grade22Base:is.thingsBase:recursionGraphics:HersheyGraphics:JapaneseGraphics:graphicsGraphics:imageGraphics:perspGraphics:plotmathLattice:intervalsLattice:labelsLattice:latticeLattice:panelStats:glm.vrStats:lm.glmStats:nlmStats:smooth作业2:利用sample函数设计算法,把下面16个demo公平地分配给15个组,并提交原程序Base:is.things作业2:利用sample函数设3一、R语言的对象所有在R语言中可操作的各种数据及各种表达式等都叫R语言的操作对象。对象命名:1、对象的名字必须是以一个字母开头(A–Z或a–z),中间可以包含字母,数字(0–9),点(.)及下划线(_);2、R对对象的名字区分大小写;3、避免用R的各种包中的既有对象名来对对象命名:例如,if、for、pi等3、可以通过输入一个对象的名字来显示其内容,例如,一个名为n的对象,其内容是数值10:>n[1]10一、R语言的对象所有在R语言中可操作的各种数据及各种表达式等4对象的产生、查询及删除1、赋值:<-或=2、函数ls的功能是显示所有在内存中的对象:只会列出对象名>name<-”Carmen”;n1<-10;n2<-100;m1<-1

>ls()>ls(pat=“m”)>ls.str()//将会展示内存中所有对象的详细信息

对象的产生、查询及删除1、赋值:<-或=53、删除:>rm(x)删除内存中所有对象:>rm(list=ls())注:ls()函数中的一些选项同样可以运用到rm中来3、删除:>rm(x)6对象的基本属性每个对象包含很多基本属性,常用的有对象的类型、存储类型、对象模式、对象长度、对象维度、对象名称等。数值型Numeric如100,0,-4.335字符型Character如“China”逻辑型Logical如TRUE,FALSE因子型Factor表示不同类别复数型Complex如:2+3i对象的类型:>mode(object)对象的长度:>length(object);>fruit<-c(5,10,1,20)>names(fruit)<-c("orange","banana","apple","peach")>mode(fruit)[1]"numeric">length(fruit)[1]4对象的基本属性每个对象包含很多基本属性,常用的有对象的类型、7对象属性的转换常用对象转化函数>as.character()#转换为字符型>as.numeric()#转换为数值型>as.logical()#转换为逻辑型>plex()#转化为复数型>as.factor()#转化为因子型>methods(as)#methods包中的全部转换函数>methods(is)#methods包中全部对象类型判别函数对象属性的转换常用对象转化函数8二、数据的创建二、数据的创建9三、数值向量1、规则序列>x<-1:30>x<-c(1,2,4,7,11)#c()为应用最广泛的向量构造函数>y<-c(x,0,x)#把所有对象连接起来形成新的向量>y<-c(“animal”)>x<-seq(1,5,by=0.5)#序列的起点、终点、步长x<-seq(length=50,from=-0.2,to=9,by=0.8)>x<-scan()#用键盘输入一些数据>rep(1,time=30)#创建一个所有元素都相同的向量>sequence(4:5)#创建一系列联系的整数序列[1]123412345三、数值向量1、规则序列10>gl(k,n)//k是水平数,n是每个水平重复的次数,有两个选项:length用来指定产生数据的个数,labels用来指定每个水平因子的名字>gl(3,5)>gl(3,5.4)#???????>gl(k,n)//k是水平数,n是每个水平重复的次数112、随机序列R可以产生多种不同分布下的随机数序列。>sample(1:40,5)[1]25322359>sample(c("H","T"),10,replace=T)[1]"H""H""T""H""H""T""H""H""H""H“2、随机序列12分布函数的形式rfunc(n,p1,p2,...),其中func指概率分布函数,n为生成数据的个数,p1,p2,...是分布的参数数值。如:rnorm#随机产生正态分布的数据>rnorm(100,2,5)#mean=1,sd=5随机分布函数rfuncr:random密度函数dfuncd:density累计概率密度函数pfuncp:probability分位数函数qfuncq:quantile

3、分布函数分布函数的形式rfunc(n,p1,p2,13>plot(rnorm(100,2,5))>plot(rnorm(100,2,5))14>x<-seq(-4,4,0.1)>plot(x,dnorm(x),type="l")>x<-seq(-4,4,0.1)15逻辑向量逻辑向量包含TRUE、FALSE和NA(notavailabe)逻辑向量可以同数值向量一起运算:TRUE=1,FALSE=0>SequenceNum<-seq(1.1,4.2)>Logicvector<-SequenceNum>2.5>logicvector错误:找不到对象'logicvector'>Logicvector[1]FALSEFALSETRUETRUE

逻辑向量逻辑向量包含TRUE、FALSE和NA(notav16>c(1:3,NA)->NaData>NaData[1]123NA>NaData[8]<-8#将NaData第8项设置为8>NaData[1]123NANANANA8>is.na(NaData)[1]FALSEFALSEFALSETRUETRUETRUETRUEFALSE>c(1:3,NA)->NaData17字符向量可以用两个单引号(‘)或两个双引号(“)去界定字符向量“/”用来识别字符串中包含的(‘)或(“)例子:>UserInfor<-c("name","user'spassword","e-mail")>UserInfor[1]"name""user'spassword""e-mail“>labs<-paste(c("X","Y"),1:10,sep="")>labs[1]"X1""Y2""X3""Y4""X5""Y6""X7""Y8""X9""Y10"字符向量可以用两个单引号(‘)或两个双引号(“)去界定字符向18复数向量>z<-complex(real=rnorm(10),imaginary=rnorm(10))>z[1]1.0464457+1.4921546i-0.0857576+0.6500323i-0.4077956+0.7363948i[4]1.2992962+1.0821262i-1.3359859-2.2430534i1.0756972+1.4531898i[7]1.1084957+0.6604677i1.2716703+0.4288688i0.2792403+0.4181003i[10]-1.0414731-2.2300299i>zz<-(rep(1:4,len=9)+1i*(9:1))/10[1]0.1+0.9i0.2+0.8i0.3+0.7i0.4+0.6i0.1+0.5i0.2+0.4i0.3+0.3i0.4+0.2i[9]0.1+0.1i>zz.shift<-complex(modulus=Mod(zz),argument=Arg(zz)+pi)>zz.shift[1]-0.1-0.9i-0.2-0.8i-0.3-0.7i-0.4-0.6i-0.1-0.5i-0.2-0.4i-0.3-0.3i[8]-0.4-0.2i-0.1-0.1i复数向量>z<-complex(real=rnor19五、分组因子R语言可以将一套数据中相同分类的数据进行分组,所用组别对象称为分组因子可以用factor()函数生成一个分组因子分组因子可以方便地对分组数据做相应计算,如:计算平均值、总和或按某种函数形式例子:>factor(sample(letters,10,replace=T),levels=letters)

[1]gbwjczodpq

Levels:abcdefghijklmnopqrstuvwxyz五、分组因子R语言可以将一套数据中相同分类的数据进行分组,所20六、数组及矩阵数组是带多个下标的、类型相同的元素的多维数据集合,类型有数值型、字符型、逻辑型、复数型等矩阵为二维数组一维数组并不等效为向量除了类型和长度等基本属性外,数组还有一个特殊属性叫做维数向量,用dim()定义六、数组及矩阵数组是带多个下标的、类型相同的元素的多维数据集21数组定义>FirstArray<-seq(1:24)>FirstArray[1]123456789101112131415161718192021222324>dim(FirstArray)<-c(3,4,2)#通过dim()函数来定义数组的维数空间>FirstArray#数组的填充规则:越靠前的下标变化越快;#越靠后的下标变化越慢,,1[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912,,2[,1][,2][,3][,4][1,]13161922[2,]14172023[3,]15182124#等价于>FirstArray<-array(seq(1:24),dim=c(3,4,2))数组定义>FirstArray<-seq(1:24)#等价于22Dimnames属性>Prices<-array(c(20,24,22,56,76,87),dim=c(2,3),#dimnames定义了维名+dimnames=list(c("vender1","vender2"),c("64M","128M","256M")))>Prices64M128M256Mvender1202276vender2245687>Prices[,c(“64M”,“256M”)]#通过维名访问数组64M256Mvender12076vender22487Dimnames属性>Prices<-array(c(20,23向量,数组的混合运算规则:1、表达式中各元素匹配时,总是从左到右。2、在进行计算时比较短的向量会扩展数据以适应最大数量元素的操作数。扩展数据的基本规则为循环地从第一个元素开始填充所需要的数据。3、所有的数组必须具有相同的dim属性,否则返回一个错误。4、任何一个向量的操作结果的长度大于数组间操作结果的长度时,R语言会产生错误。5、如果数组间操作无误,那么计算结果也是一个相同维度的数组。向量,数组的混合运算规则:24>a1<-array(1:12,dim=c(4,3))>a2<-array(1:9,dim=c(3,3))>a1[,1][,2][,3][1,]159[2,]2610[3,]3711[4,]4812>a2[,1][,2][,3][1,]147[2,]258[3,]369>a1+a2错误于a1+a2:非整合陈列>a2<-array(1:9,dim=c(4,3))>a2[,1][,2][,3][1,]159[2,]261[3,]372[4,]483>a1+a2[,1][,2][,3][1,]21018[2,]41211[3,]61413[4,]81615>a1*a2[,1][,2][,3][1,]12581[2,]43610[3,]94922[4,]166436不同dim属性相同dim属性不同dim属性相同dim属性>a1<-array(1:12,dim=c(4,3))>25>a3<-array(1:3,dim=c(1,3))>a3[,1][,2][,3][1,]123>a2+a3错误于a2+a3:非整合陈列一维数组并不等效为向量>a4<-1:3>a4[1]123>a4+a2[,1][,2][,3][1,]2712[2,]492[3,]684[4,]5106向量与数组运算>a5<-1:7>a4+a5[1]2465798警告信息:Ina4+a5:长的对象长度不是短的对象长度的整倍数不同长度的向量运算>a6<-1:13>a6+a2错误:dims[product12]与对象长度[13]不匹配此外:警告信息:Ina6+a2:长的对象长度不是短的对象长度的整倍数>a7<-1:24>a7+a2错误:dims[product12]与对象长度[24]不匹配一维数组并不等效为向量不同长度的向量运算>a3<-array(1:3,dim=c(1,3))一维数26两个数组的外积>A<-array(1:4,dim=c(2,2))>B<-array(1:12,dim=c(3,4))>A[,1][,2][1,]13[2,]24>B[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912>B%o%A,,1,1[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912,,2,1[,1][,2][,3][,4][1,]281420[2,]4101622[3,]6121824,,1,2[,1][,2][,3][,4][1,]3122130[2,]6152433[3,]9182736,,2,2[,1][,2][,3][,4][1,]4162840[2,]8203244[3,]12243648>AB<-outer(B,A,“*”)#?outer()两个数组的外积>A<-array(1:4,dim=c(2,27数组转置aperm(a,perm,resize=TRUE)#a为数组,perm为转置下标向量>x<-array(1:6,2:3)>x[,1][,2][,3][1,]135[2,]246>xt<-aperm(x,c(2,1))>xt[,1][,2][1,]12[2,]34[3,]56数组转置aperm(a,perm,resize=TRUE)28>x<-array(1:24,2:4)>x,,1[,1][,2][,3][1,]135[2,]246,,2[,1][,2][,3][1,]7911[2,]81012,,3[,1][,2][,3][1,]131517[2,]141618,,4[,1][,2][,3][1,]192123[2,]202224>xt<-aperm(x,c(2,1,3))>xt,,1[,1][,2][1,]12[2,]34[3,]56,,2[,1][,2][1,]78[2,]910[3,]1112,,3[,1][,2][1,]1314[2,]1516[3,]1718,,4[,1][,2][1,]1920[2,]2122[3,]2324>x<-array(1:24,2:4)>xt<29七、矩阵#nrow定义行数,ncol定义列数,dimnames定义行和列的名称,byrow定义矩阵的填充顺序,为T时按行填充,为F时按列填充>mdat<-matrix(c(1,2,3,11,12,13),nrow=2,ncol=3,byrow=TRUE,+dimnames=list(c("row1","row2"),c("C.1","C.2","C.3")))>mdatC.1C.2C.3row1123row2111213>t(mdat)row1row2C.1111C.2212C.3313>xt<-aperm(mdat,c(2,1))>xtrow1row2C.1111C.2212C.3313转置>t(mdat)row1row2C.1111C.2212C.3313>xt<-aperm(mdat,c(2,1))>xtrow1row2C.1111C.2212C.3313转置七、矩阵#nrow定义行数,ncol定义列数,dimnam30>a1<-matrix(c(1,2,3,4,5,6),nrow=2,ncol=3)>a2<-matrix(seq(1:9),nrow=3,ncol=3)>a1[,1][,2][,3][1,]135[2,]246>a2[,1][,2][,3][1,]147[2,]258[3,]369>a1%*%a2[,1][,2][,3][1,]224976[2,]2864100>a1%*%a1错误于a1%*%a1:非整合参数>a2%*%a1错误于a2%*%a1:非整合参数两个矩阵内积>a1<-matrix(c(1,2,3,4,5,6),nr31>Coefficient<-array(c(3,2,-2,1),dim=c(2,2))#系数矩阵>Result<-c(12,1)#结果矩阵>solve(Coefficient,Result)#sovle()返回线性方程组行列式结果[1]2-3#a=2,b=-3求解线性方程组:3a-2b=122a+b=1>solve(Coefficient)#求矩阵Coefficient的逆[,1][,2][1,]0.14285710.2857143[2,]-0.28571430.4285714>Coefficient<-array(c(3,2,-2,32矩阵计算函数练习2.1熟练掌握矩阵计算的有关函数矩阵计算函数练习2.1熟练掌握矩阵计算的有关函数33数组矩阵合并函数rbind()把参数变量按行拼成一个大矩阵,两个数组(或向量)的列数必须相等函数cbind()把参数变量按列拼成一个大矩阵,两个数组(或向量)的行数必须相等数组矩阵合并函数rbind()把参数变量按行拼成一个大矩阵,34>a1<-array(1:6,dim=c(2,3))>a2<-array(1:9,dim=c(3,3))>a1[,1][,2][,3][1,]135[2,]246>a2[,1][,2][,3][1,]147[2,]258[3,]369>rbind(a1,a2)[,1][,2][,3][1,]135[2,]246[3,]147[4,]258[5,]369>cbind(a1,a2)错误于cbind(a1,a2):矩阵的行数必需相符(见arg2)>t(a1)[,1][,2][1,]12[2,]34[3,]56>a1<-t(a1)>cbind(a1,a2)[,1][,2][,3][,4][,5][1,]12147[2,]34258[3,]56369>a1<-array(1:6,dim=c(2,3))>c35八、数据分割与选取向量索引X[n]#第n个元素X[-n]#除了第n个元素外的XX[1:n]#前n个元素X[-(1:n)]#第n+1至最后的元素X[c(1,4,2)]#指定下标的元素X[“name”]#名为name的元素X[X>3]#所有大于3的元素X[X>3&X<=5]#区间(3,5]的元素X[X%in%c(“a”,”and”,”the”)]#给定组c()中的元素八、数据分割与选取向量索引36>X<-1:9>names(X)<-letters[1:9]>Xabcdefghi123456789>X[6]f6>X[2:6]bcdef23456>X[-3]abdefghi12456789>X[-(5:9)]abcd1234>X[-c(5,9,2)]acdfgh134678>X[X>5]fghi6789>X[X>5&X<=8]fgh678>X[c("c","g","d")]cgd374>X[X%in%letters[5:13]]namedinteger(0)>X[X%in%5:13]efghi56789>sstr<-c("c","ab","B","bba","c","@","bla","a","Ba","%")>sstr[sstr%in%c(letters,LETTERS)][1]"c""B""c""a"例子>X<-1:9>X[X>5]>sstr<-c("37X[i,j]#下标为(i,j)的元素X[i,]#第i列X[,j]#第j列X[,c(1,3)]#第1,3列X[“name”,]#名为”name”的行数组具有类似的数据分割与选取方法矩阵索引练习2.2熟练掌握数据分割与选取的方法X[i,j]#下标38>X<-matrix(1:12,nrow=3,ncol=4,byrow=T,dimnames=list(c(letters[1:3]),LETTERS[4:7]))>XDEFGa1234b5678c9101112>X[2,3][1]7>X[2,]DEFG5678>X[,4]abc4812>X[,c(1,3)]DFa13b57c911>X["a",]DEFG1234>X<-matrix(1:12,nrow=3,ncol=439九、数据列表数据列表(list)是一组数据元素的集合,这些数据元素可以是不同的数据结构(dim属性,数据类型等)list()函数可以组合任意对象九、数据列表40>FamilyInfo<-list(hostname="joe",wife="rose",no.children=3,child.ages=c(1,3,7))>FamilyInfo$hostname[1]"joe"$wife[1]"rose"$no.children[1]3$child.ages[1]137>FamilyInfo$wife#通过元素的名字来访问[1]"rose“>FamilyInfo[3]#通过元素的编号来访问$no.children[1]3>FamilyInfo[[3]][1]3例子>FamilyInfo<-list(hostname="j41数据列表操作长度扩展>length(FamilyInfo)[1]4>FamilyInfo[5]<-list(address=c("10thF,HongXingBuilding,No.100,JainYeRoad"))>FamilyInfo$hostname[1]"joe"$wife[1]"rose"$no.children[1]3$child.ages[1]137[[5]][1]"10thF,HongXingBuilding,No.100,JainYeRoad"数据列表操作长度扩展>length(FamilyInfo)42数据列表合并>FamilyBirthday<-list(hostbirthday="1979/10/08",wifebirthday="1973/07/09")>c(FamilyInfo,FamilyBirthday)->Family#函数c()可以连接数据列表>Family$hostname[1]"joe"$wife[1]"rose"$no.children[1]3$child.ages[1]137[[5]][1]"10thF,HongXingBuilding,No.100,JainYeRoad"$hostbirthday[1]"1979/10/08"$wifebirthday[1]"1973/07/09"数据列表合并>FamilyBirthday<-list(h43数据框(dataframe)是一个属于"data.frame"类的列表。不过,对于可能属于数据框的列表对象有下面一些限制条件,1、分量必须是向量(数值,字符,逻辑),因子,数值矩阵,列表或者其他数据框;2、矩阵,列表和数据框为新的数据框提供了尽可能多的变量,因为它们各自拥有列,元素或者变量;3、数值向量,逻辑值,因子保持原有格式,而字符向量会被强制转换成因子并且它的水平就是向量中出现的独立值;4、在数据框中以变量形式出现的向量结构必须长度一致,矩阵结构必须有一样的行数.数据框常常会被看作是一个由不同模式和属性的列构成的矩阵。它能以矩阵形式出现,行列可以通过矩阵的索引习惯访问。十、数据框数据框(dataframe)是一个属于"dat44创建数据框>L3<-LETTERS[1:3]>d<-data.frame(cbind(x=1,y=1:10),fac=sample(L3,10,replace=TRUE))>dxyfac111C212A313B414C515A616B717B818B919B10110A>d[1]x112131415161718191101>d[[1]][1]1111111111>mode(d[1])[1]"list">mode(d[[1]])[1]"numeric"

>length(d[1])[1]1>length(d[[1]])[1]10>d[[2]][3][1]3创建数据框>L3<-LETTERS[1:3]>d[145>d<-data.frame(cbind(x=1,y=1:10),+fac=sample(L3,10,replace=TRUE),+HT=sample(c("H","T"),10,replace=T))>dxyfacHT111BT212AH313BH414AT515CT616AT717BH818CT919CH10110AT>rbind(class=sapply(d,class),mode=sapply(d,mode))xyfacHTclass"numeric""numeric""factor""factor"mode"numeric""numeric""numeric""numeric">d<-data.frame(cbind(x=1,y=46>d<-data.frame(cbind(x=1,y=1:10),fac=I(sample(L3,10,replace=TRUE)),HT=sample(c("H","T"),10,replace=T))>dxyfacHT111AH212AT313CT414AT515BH616CH717CT818AH919AT10110CH>rbind(class=sapply(d,class),mode=sapply(d,mode))xyfacHTclass"numeric""numeric""AsIs""factor"mode"numeric""numeric""character""numeric">d[[3]][1]"A""A""C""A""B""C""C""A""A""C">d[[4]][1]HTTTHHTHTHLevels:HT函数I():Changetheclassofanobjecttoindicatethatitshouldbetreated‘asis’>d<-data.frame(cbind(x=1,y47十一、数据运算十一、数据运算48第二讲R语言的基本数据结构课件49练习2.3熟练掌握数据运算的有关符号和函数练习2.3熟练掌握数据运算的有关符号和函数50十二、数据的选择与操作十二、数据的选择与操作51十三、高级数据处理对于向量,可以用函数直接对其进行计算对于数组和矩阵,如果需要对其中一维(或若干维)进行某种计算时,则可以用apply()函数自定义数组的操作.apply(X,MARGIN,FUN,…)#X给定数组,MARGIN指定维数,FUN自定义计算函数。十三、高级数据处理对于向量,可以用函数直接对其进行计算52#FUN为R自带包中的函数>X<-matrix(1:24,nrow=4)>X[,1][,2][,3][,4][,5][,6][1,]159131721[2,]2610141822[3,]3711151923[4,]4812162024>apply(X,MARGIN=1,sum)[1]66727884>apply(X,MARGIN=2,sum)[1]102642587490#FUN为自定义函数>f<-function(V){d=sd(V)/mean(V);return(d);}>ffunction(V){d=sd(V)/mean(V);return(d);}>apply(X,MARGIN=2,f)[1]0.516397780.198614530.122951850.089034100.069783480.05737753>apply(X,MARGIN=1,f)[1]0.68030130.62360960.57563960.5345225例子#FUN为R自带包中的函数#FUN为自定义函数例子53lapply(X,FUN)#应用FUN到列表X的每个元素tapply(X,INDEX,FUN)#根据X的索引(INDEX)对不完全的数列应用FUNsapply()#同lapplylapply(X,FUN)#应用FUN到列表X的每个元素54第二讲R语言的基本数据结构第二讲R语言的基本数据结构55NameIDTeam.NumDutyGrade1Grade2Grade3Grade4Grade5WangN2007091captainNANANANANATangMJ2007201memberNANANANANA………………………作业1:按下面表格的形式生成本组信息的数据框,并提交原程序.Name为字符型、ID为数字型、Team.Num为分组因子、Duty为分组因子、Grade1-5为数值型NameIDTeam.NumDutyGrade1Grade256Base:is.thingsBase:recursionGraphics:HersheyGraphics:JapaneseGraphics:graphicsGraphics:imageGraphics:perspGraphics:plotmathLattice:intervalsLattice:labelsLattice:latticeLattice:panelStats:glm.vrStats:lm.glmStats:nlmStats:smooth作业2:利用sample函数设计算法,把下面16个demo公平地分配给15个组,并提交原程序Base:is.things作业2:利用sample函数设57一、R语言的对象所有在R语言中可操作的各种数据及各种表达式等都叫R语言的操作对象。对象命名:1、对象的名字必须是以一个字母开头(A–Z或a–z),中间可以包含字母,数字(0–9),点(.)及下划线(_);2、R对对象的名字区分大小写;3、避免用R的各种包中的既有对象名来对对象命名:例如,if、for、pi等3、可以通过输入一个对象的名字来显示其内容,例如,一个名为n的对象,其内容是数值10:>n[1]10一、R语言的对象所有在R语言中可操作的各种数据及各种表达式等58对象的产生、查询及删除1、赋值:<-或=2、函数ls的功能是显示所有在内存中的对象:只会列出对象名>name<-”Carmen”;n1<-10;n2<-100;m1<-1

>ls()>ls(pat=“m”)>ls.str()//将会展示内存中所有对象的详细信息

对象的产生、查询及删除1、赋值:<-或=593、删除:>rm(x)删除内存中所有对象:>rm(list=ls())注:ls()函数中的一些选项同样可以运用到rm中来3、删除:>rm(x)60对象的基本属性每个对象包含很多基本属性,常用的有对象的类型、存储类型、对象模式、对象长度、对象维度、对象名称等。数值型Numeric如100,0,-4.335字符型Character如“China”逻辑型Logical如TRUE,FALSE因子型Factor表示不同类别复数型Complex如:2+3i对象的类型:>mode(object)对象的长度:>length(object);>fruit<-c(5,10,1,20)>names(fruit)<-c("orange","banana","apple","peach")>mode(fruit)[1]"numeric">length(fruit)[1]4对象的基本属性每个对象包含很多基本属性,常用的有对象的类型、61对象属性的转换常用对象转化函数>as.character()#转换为字符型>as.numeric()#转换为数值型>as.logical()#转换为逻辑型>plex()#转化为复数型>as.factor()#转化为因子型>methods(as)#methods包中的全部转换函数>methods(is)#methods包中全部对象类型判别函数对象属性的转换常用对象转化函数62二、数据的创建二、数据的创建63三、数值向量1、规则序列>x<-1:30>x<-c(1,2,4,7,11)#c()为应用最广泛的向量构造函数>y<-c(x,0,x)#把所有对象连接起来形成新的向量>y<-c(“animal”)>x<-seq(1,5,by=0.5)#序列的起点、终点、步长x<-seq(length=50,from=-0.2,to=9,by=0.8)>x<-scan()#用键盘输入一些数据>rep(1,time=30)#创建一个所有元素都相同的向量>sequence(4:5)#创建一系列联系的整数序列[1]123412345三、数值向量1、规则序列64>gl(k,n)//k是水平数,n是每个水平重复的次数,有两个选项:length用来指定产生数据的个数,labels用来指定每个水平因子的名字>gl(3,5)>gl(3,5.4)#???????>gl(k,n)//k是水平数,n是每个水平重复的次数652、随机序列R可以产生多种不同分布下的随机数序列。>sample(1:40,5)[1]25322359>sample(c("H","T"),10,replace=T)[1]"H""H""T""H""H""T""H""H""H""H“2、随机序列66分布函数的形式rfunc(n,p1,p2,...),其中func指概率分布函数,n为生成数据的个数,p1,p2,...是分布的参数数值。如:rnorm#随机产生正态分布的数据>rnorm(100,2,5)#mean=1,sd=5随机分布函数rfuncr:random密度函数dfuncd:density累计概率密度函数pfuncp:probability分位数函数qfuncq:quantile

3、分布函数分布函数的形式rfunc(n,p1,p2,67>plot(rnorm(100,2,5))>plot(rnorm(100,2,5))68>x<-seq(-4,4,0.1)>plot(x,dnorm(x),type="l")>x<-seq(-4,4,0.1)69逻辑向量逻辑向量包含TRUE、FALSE和NA(notavailabe)逻辑向量可以同数值向量一起运算:TRUE=1,FALSE=0>SequenceNum<-seq(1.1,4.2)>Logicvector<-SequenceNum>2.5>logicvector错误:找不到对象'logicvector'>Logicvector[1]FALSEFALSETRUETRUE

逻辑向量逻辑向量包含TRUE、FALSE和NA(notav70>c(1:3,NA)->NaData>NaData[1]123NA>NaData[8]<-8#将NaData第8项设置为8>NaData[1]123NANANANA8>is.na(NaData)[1]FALSEFALSEFALSETRUETRUETRUETRUEFALSE>c(1:3,NA)->NaData71字符向量可以用两个单引号(‘)或两个双引号(“)去界定字符向量“/”用来识别字符串中包含的(‘)或(“)例子:>UserInfor<-c("name","user'spassword","e-mail")>UserInfor[1]"name""user'spassword""e-mail“>labs<-paste(c("X","Y"),1:10,sep="")>labs[1]"X1""Y2""X3""Y4""X5""Y6""X7""Y8""X9""Y10"字符向量可以用两个单引号(‘)或两个双引号(“)去界定字符向72复数向量>z<-complex(real=rnorm(10),imaginary=rnorm(10))>z[1]1.0464457+1.4921546i-0.0857576+0.6500323i-0.4077956+0.7363948i[4]1.2992962+1.0821262i-1.3359859-2.2430534i1.0756972+1.4531898i[7]1.1084957+0.6604677i1.2716703+0.4288688i0.2792403+0.4181003i[10]-1.0414731-2.2300299i>zz<-(rep(1:4,len=9)+1i*(9:1))/10[1]0.1+0.9i0.2+0.8i0.3+0.7i0.4+0.6i0.1+0.5i0.2+0.4i0.3+0.3i0.4+0.2i[9]0.1+0.1i>zz.shift<-complex(modulus=Mod(zz),argument=Arg(zz)+pi)>zz.shift[1]-0.1-0.9i-0.2-0.8i-0.3-0.7i-0.4-0.6i-0.1-0.5i-0.2-0.4i-0.3-0.3i[8]-0.4-0.2i-0.1-0.1i复数向量>z<-complex(real=rnor73五、分组因子R语言可以将一套数据中相同分类的数据进行分组,所用组别对象称为分组因子可以用factor()函数生成一个分组因子分组因子可以方便地对分组数据做相应计算,如:计算平均值、总和或按某种函数形式例子:>factor(sample(letters,10,replace=T),levels=letters)

[1]gbwjczodpq

Levels:abcdefghijklmnopqrstuvwxyz五、分组因子R语言可以将一套数据中相同分类的数据进行分组,所74六、数组及矩阵数组是带多个下标的、类型相同的元素的多维数据集合,类型有数值型、字符型、逻辑型、复数型等矩阵为二维数组一维数组并不等效为向量除了类型和长度等基本属性外,数组还有一个特殊属性叫做维数向量,用dim()定义六、数组及矩阵数组是带多个下标的、类型相同的元素的多维数据集75数组定义>FirstArray<-seq(1:24)>FirstArray[1]123456789101112131415161718192021222324>dim(FirstArray)<-c(3,4,2)#通过dim()函数来定义数组的维数空间>FirstArray#数组的填充规则:越靠前的下标变化越快;#越靠后的下标变化越慢,,1[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912,,2[,1][,2][,3][,4][1,]13161922[2,]14172023[3,]15182124#等价于>FirstArray<-array(seq(1:24),dim=c(3,4,2))数组定义>FirstArray<-seq(1:24)#等价于76Dimnames属性>Prices<-array(c(20,24,22,56,76,87),dim=c(2,3),#dimnames定义了维名+dimnames=list(c("vender1","vender2"),c("64M","128M","256M")))>Prices64M128M256Mvender1202276vender2245687>Prices[,c(“64M”,“256M”)]#通过维名访问数组64M256Mvender12076vender22487Dimnames属性>Prices<-array(c(20,77向量,数组的混合运算规则:1、表达式中各元素匹配时,总是从左到右。2、在进行计算时比较短的向量会扩展数据以适应最大数量元素的操作数。扩展数据的基本规则为循环地从第一个元素开始填充所需要的数据。3、所有的数组必须具有相同的dim属性,否则返回一个错误。4、任何一个向量的操作结果的长度大于数组间操作结果的长度时,R语言会产生错误。5、如果数组间操作无误,那么计算结果也是一个相同维度的数组。向量,数组的混合运算规则:78>a1<-array(1:12,dim=c(4,3))>a2<-array(1:9,dim=c(3,3))>a1[,1][,2][,3][1,]159[2,]2610[3,]3711[4,]4812>a2[,1][,2][,3][1,]147[2,]258[3,]369>a1+a2错误于a1+a2:非整合陈列>a2<-array(1:9,dim=c(4,3))>a2[,1][,2][,3][1,]159[2,]261[3,]372[4,]483>a1+a2[,1][,2][,3][1,]21018[2,]41211[3,]61413[4,]81615>a1*a2[,1][,2][,3][1,]12581[2,]43610[3,]94922[4,]166436不同dim属性相同dim属性不同dim属性相同dim属性>a1<-array(1:12,dim=c(4,3))>79>a3<-array(1:3,dim=c(1,3))>a3[,1][,2][,3][1,]123>a2+a3错误于a2+a3:非整合陈列一维数组并不等效为向量>a4<-1:3>a4[1]123>a4+a2[,1][,2][,3][1,]2712[2,]492[3,]684[4,]5106向量与数组运算>a5<-1:7>a4+a5[1]2465798警告信息:Ina4+a5:长的对象长度不是短的对象长度的整倍数不同长度的向量运算>a6<-1:13>a6+a2错误:dims[product12]与对象长度[13]不匹配此外:警告信息:Ina6+a2:长的对象长度不是短的对象长度的整倍数>a7<-1:24>a7+a2错误:dims[product12]与对象长度[24]不匹配一维数组并不等效为向量不同长度的向量运算>a3<-array(1:3,dim=c(1,3))一维数80两个数组的外积>A<-array(1:4,dim=c(2,2))>B<-array(1:12,dim=c(3,4))>A[,1][,2][1,]13[2,]24>B[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912>B%o%A,,1,1[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912,,2,1[,1][,2][,3][,4][1,]281420[2,]4101622[3,]6121824,,1,2[,1][,2][,3][,4][1,]3122130[2,]6152433[3,]9182736,,2,2[,1][,2][,3][,4][1,]4162840[2,]8203244[3,]12243648>AB<-outer(B,A,“*”)#?outer()两个数组的外积>A<-array(1:4,dim=c(2,81数组转置aperm(a,perm,resize=TRUE)#a为数组,perm为转置下标向量>x<-array(1:6,2:3)>x[,1][,2][,3][1,]135[2,]246>xt<-aperm(x,c(2,1))>xt[,1][,2][1,]12[2,]34[3,]56数组转置aperm(a,perm,resize=TRUE)82>x<-array(1:24,2:4)>x,,1[,1][,2][,3][1,]135[2,]246,,2[,1][,2][,3][1,]7911[2,]81012,,3[,1][,2][,3][1,]131517[2,]141618,,4[,1][,2][,3][1,]192123[2,]202224>xt<-aperm(x,c(2,1,3))>xt,,1[,1][,2][1,]12[2,]34[3,]56,,2[,1][,2][1,]78[2,]910[3,]1112,,3[,1][,2][1,]1314[2,]1516[3,]1718,,4[,1][,2][1,]1920[2,]2122[3,]2324>x<-array(1:24,2:4)>xt<83七、矩阵#nrow定义行数,ncol定义列数,dimnames定义行和列的名称,byrow定义矩阵的填充顺序,为T时按行填充,为F时按列填充>mdat<-matrix(c(1,2,3,11,12,13),nrow=2,ncol=3,byrow=TRUE,+dimnames=list(c("row1","row2"),c("C.1","C.2","C.3")))>mdatC.1C.2C.3row1123row2111213>t(mdat)row1row2C.1111C.2212C.3313>xt<-aperm(mdat,c(2,1))>xtrow1row2C.1111C.2212C.3313转置>t(mdat)row1row2C.1111C.2212C.3313>xt<-aperm(mdat,c(2,1))>xtrow1row2C.1111C.2212C.3313转置七、矩阵#nrow定义行数,ncol定义列数,dimnam84>a1<-matrix(c(1,2,3,4,5,6),nrow=2,ncol=3)>a2<-matrix(seq(1:9),nrow=3,ncol=3)>a1[,1][,2][,3][1,]135[2,]246>a2[,1][,2][,3][1,]147[2,]258[3,]369>a1%*%a2[,1][,2][,3][1,]224976[2,]2864100>a1%*%a1错误于a1%*%a1:非整合参数>a2%*%a1错误于a2%*%a1:非整合参数两个矩阵内积>a1<-matrix(c(1,2,3,4,5,6),nr85>Coefficient<-array(c(3,2,-2,1),dim=c(2,2))#系数矩阵>Result<-c(12,1)#结果矩阵>solve(Coefficient,Result)#sovle()返回线性方程组行列式结果[1]2-3#a=2,b=-3求解线性方程组:3a-2b=122a+b=1>solve(Coefficient)#求矩阵Coefficient的逆[,1][,2][1,]0.14285710.2857143[2,]

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论