R语言学习汇总报告经过接近一个学期的学习,从对R语言的完全陌生,到现在对其有了一些粗浅的认识,其中经历了遇到困难苦思冥想的艰辛,也有解决问题以后豁然开朗的畅快在学习的过程中,以前掌握的数理基础给我带来了不少便利,而认真地态度和踏实的性格也使我获益匪浅在这个学期中,我学会了R语言的基本操作和语法,以及针对具体的统计学问题相应的解决方法并按时完成老师布置的课后作业,以达到学以致用的目的,也加强了对R语言操作的熟练度一、初识R软件R软件是一套完整的数据处理、计算和制图软件系统其功能包括:据存储和处理,数组运算,完整连贯的统计分析工具,优秀的统计制图功能已及简便而强大编程语言接触R语言以后,我的第一感觉就是方便和强大R语言中有非常多的函数和包,我们几乎不用自己去编一些复杂的算法,而往往只需要短短几行代码就能解决很复杂的问题,这给我们的使用带来了极大地方便于此同时,它又可操纵数据的输入输出,实习分支、循环,使用者可以自定义功能,这就意味着当找不到合适的函数或包来解决所遇的问题时,我们又可以自己编程去实现各种具体功能,这也正是R语言的强大之处二、学习心得在学习该书的过程中,我不仅加深了对统计学方法的理解,同时也掌握了R软件的编程方法和基本技巧,了解了各种函数的意义和用法,并能把两者结合起来,解决实际中的统计问题。
1、R语言的基本语法及技巧R语言不仅可以进行基础的数字、字符以及向量的运算,内置了许多与向量运算有关的函数而且还提供了十分灵活的访问向量元素和子集的功能R语言中经常出现数组,它可以看作是定义了维数(dim属性)的向量因此数组同样可以进行各种运算,以及访问数组元素和子集二维数组(矩阵)是比较重要和特殊的一类数组,R可以对矩阵进行内积、外积、乘法、求解、奇异值分解及最小二乘拟合等运算,以及进行矩阵的合并、拉直等apply()函数可以在对矩阵的一维或若干维进行某种计算,例如apply(A,1,mean)表示对A按行求和R语言允许将不同类型的元素放在一个集合中,这个集合叫做一个列表,列表元素总可以用“列表名[[下标]]”的格式引用而“列表名[下标]”表示的是一个子列表,这是一个很容易混淆的地方R语言中非常重要的一种数据结构是data.frame(数据框),它通常是矩阵形式的数据,但每列可以是不同类型,数据框每列是一个变量,每行是一个观测,要注意的是每一列必须有相同的长度数据框元素可以使用下标或者下标向量引用用一个非常简单的例子来说明向量、矩阵和数据框的简单运用输入:A<-matrix(c(1:12),2,6,byrow=T)#A为一个2行6列,按行排列的矩阵X<-as.data.frame(A)#把A转化成数据框形式的XX[1:2,seq(1,5,2)]#输出X的第1、2行和1、3、5列输出:V1V3V51 1352 7911输入:attach(X);Rv-V1/V5;R#调用数据框X,计算并输出V1和V5的比值输出:[1]0.20000000.6363636与此同时R语言中也提供了其它高级程序语言共有的分支、循环等程序控制结构。
比如if/else语句,for循环等因此R语言也可以很容易的根据情况编写自己所需要的函数例:编写一个R程序,输入一个整数n,如果n小于等于0,中止运算,并输出:“要求输入一个正整数”否则,如果n是偶数,则将n除2赋值给n否则将3n+1赋给n不断循环,直到n=1停止,并输出:“运算成功”解:新建一个程序脚本,名为chapter2.R”,写入代码:fv-function(n){if(n<=0)list("要求输入一个正整数")else{repeat{if(n==1)break#n=1时终止elseif(n/2==as.integer(n/2))n<-n/2#n为偶数时除2elsen<-3*n+1}list("运算成功")}}在R窗口中输入:Source(“chapter2.R”);f(32)输出:[1]"运算成功"输入:f(-5)输出:[1]"要求输入一个正整数"2、R在统计描述中的应用数据框操作(plyr包)辅助小函数1 splat函数:作用:把原函数中多个参数打包为一个list作为参数,然后输出新的函数也就是说本来某个函数需要输入多个参数,现在套上splat后,只要输入一个参数list就可以了,不需要单独地输入参数。
它的作用结果是把一个函数变成一个新函数m*ply(a_matrix,FUN)的作用和a*ply(a_matrix,1,splat(FUN))—样例:(1)参数使用1] 18.33333splat(hp_per_cyl)(mtcars)[1] 18.3333318.3333323.2500018.3333321.8750017.5000030.6250015.5000023.75000[10]20.5000020.5000022.5000022.5000022.5000025.6250028.7500016.50000[19]13.0000016.2500024.2500018.7500018.7500030.6250016.5000022.75000[28]28.2500033.0000029.1666741.8750027.25000等价于:>hp_per_cyl(mtcars$hp,mtcars$cyl)splat函数的优点就是可以不用拆分字段,可以一起输入作为参数2) 与plyr函数合用:> fv-function(mpg,wt,...)data.frame(mw=mpg/wt)ddply(mtcars,.(cyl),splat(f))2 each函数作用:把多个函数汇聚成一个函数,当使用这个函数时,将分别作用多个函数。
它的作用结果是把一个函数变成一个新函数不足:不能给作用的函数指定附加参数,只能使用默认参数例:> funv-function(x)c(min=min(x),max=max(x),mean=mean(x))> fun(1:10)等价于:> f<-each(min,max,mean)> f(1:10)3 colwise函数colwise(.fun,.cols,...)说明:.fun:要转化的函数cols是测试数据框的列是否应包含的判别函数或者是•要包含的列的名称catcolwise(.fun,...)与colwise功能类似,只是对离散型变量有效numcolwise(.fun,...)与colwise功能类似,只是对数值型变量有效作用:把作用于数据框行向量的函数(如mean,median等)转化为作用于数据框列向量的函数于plyr函数一起使用十分方便作用结果生成一个新的函数例:> nmissing<-function(x)sum(is.na(x))> colwise(nmissing)(baseball)> colwise(nmissing,.(sb,cs,so))(baseball)> ddply(baseball,.(year),colwise(nmissing,.(sb,cs,so)))> numcolwise(nmissing)(baseball)等价于:colwise(nmissing,is.numeric)(baseball)> catcolwise(nmissing)(baseball)等价于:colwise(nmissing,is.discrete)(baseball)4 failwith函数failwith(default=NULL,f,quiet=FALSE)作用:修正一个函数,使得当该函数出现错误时返回一个设定的默认值,默认为空。
作用结果生成一个新的函数> fv-function(x)if(x==1)stop("Error")else1f(1)Errorinf(1):Errorsafef<-failwith(,f)> safef(1)Errorinf(...):ErrorNULL>safefv-failwith(12,f,quiet=TRUE)safef(1)[1]125 summarise()函数summarise(.data,…)作用:对数据框做统计汇总,…为设定的统计方法或函数例:>summarise(baseball,duration=max(year)-min(year),nteams=length(unique(team)))durationnteams136132>head(ddply(baseball,"id",summarise,duration=max(year)-min(year),nteams=length(unique(team))))iddurationnteamsaaronha012231 abernte02177adairje011242 adamsba01202adamsbo031343 adcocjo01165数据集变量操作1变量排序:arrange函数arrange(df,.(var1),.(var2)…)作用:按照指定列排序。
注意:使用arrange函数排完序后行名会丢失,需要用cbind补回例:> arrange(mtcars,cyl,disp)cars<-cbind(vehicle=row.names(mtcars),mtcars)> arrange(cars,cyl,disp)先把行名作为一个新的列加到数据框再排序2更改变量名rename(x,replace,warn_missing=TRUE)作用:通过名字修改变量名字,不是根据它的位置例:>head(rename(tmt,replace=c("mpg"二"avgpg",”cly”=”new”)))3取行或列的数据take(x,along,indices,drop=FALSE)作用:在x中,按照某个维度取数参数说明:x为取数的源数据,可以是array或者dataframeoalong:维度1表示行,2表示列,3表示数组快等等indices:具体维度所对应的指drop:是否整合例:>take(mtcars,2,1)--取第一列> take(mtcars,1,1)--取第一行数据集操作1数据集链接1) match_dfmatch_df(x,y,on=NULL)作用:;为原始的需要提取的数据框,y为条件数据框。
on指定用来连接的变量,默认为两个数据框中所有变量,可以为多个通过on后面的字段,到x数据框取选取数据,相当于innerjoin,区别为:前者结果集是x的一个子集innerjoin包括两个数据框中所有字段例:基础数据> a<-c("a","b","c","d")> b<-c("aa","bb","aa","dd")> c<-c(1,2,3,4)> t1<-data.frame(a,b,c)> t2<-data.frame(a=c("a","c","e"),b=c("aa","ab","cd"))> match_df(t1,t2,on=c("a","b"))|abc1 aaa12) joinjoin(x,y,by=NULL,type=“left”,match=“all”)作用:连接两个数据框参数说明:x,y为数据框by=为要连接的字段,type为连接类型:left、right、fullmatch:all(所有匹配上的其他属性。