《R语言程序设计》 课件 第8章 高级性能_第1页
《R语言程序设计》 课件 第8章 高级性能_第2页
《R语言程序设计》 课件 第8章 高级性能_第3页
《R语言程序设计》 课件 第8章 高级性能_第4页
《R语言程序设计》 课件 第8章 高级性能_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

高级特性目录R语言与面向对象面向对象基础知识:封装、多态、继承R语言与面向对象编程:泛型函数,S3,S4R语言的程序调试R语言性能提升通过向量化方式优化代码将消耗资源部分用编译型语言编写并行方式编写并运行使用GPU加速R语言与面向对象目录面向对象基础知识概念:对象、类特点:封装、多态、继承R语言与面向对象编程基础函数:class(),mode(),typeof()函数:unclass(),attributes()泛型函数:plot(),print()面向对象类型:S3,S4函数:setClass(),new(),slot()对象的管理:ls(),rm(),save(),load(),exists()…对象(Object)现实世界中,对象指客观世界存在的任何事物。面向对象程序中,对象由数据和操作封装而成。对象的构成标识:对象的名称属性(数据):描述对象的状态方法(操作):对象的行为类(Class)具有相同属性和方法的对象的集合。类是对象的抽象,对象是类的实例。面向对象基础面向对象的特性面向对象程序设计(OOP)的特点:“封装”、“多态”、“继承”。封装:把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(对象)。尽可能隐蔽对象的内部细节(信息隐藏)。多态:相同的函数使用不同类的对象时可以调用不同的操作。继承:允许把一个给定的类的性质自动赋予为其下属的更特殊化的类。继承性是父类和子类之间共享数据和方法的机制,继承性具有传递性。R语言是一种函数式语言,但同样支持面向对象编程。提高软件的重用性,灵活性和扩展性。R基本的数据类型:数值(numeric)、逻辑(logical)、字符(character)等,在此基础上构成了一些复合型的数据类型或数据结构:矩阵(matrix)、数组(array)、数据框(dataframe)等。除此用户还可以自定义新的类型。所有的类型都是建立在基本数据类型之上的。数据类型,可以看做是类。R的面向对象特性由类创建的对象中包含了很多属性(Attribute),其中一种重要的属性就是它所属的类(Class)。R的面向对象特性x<-c(1,2,3)y<-c(1,3,8)class(x)lmot<-lm(y~x)class(lmot)mode(x)mode(lmot)typeof(x)typeof(lmot)R语言class()mode()typeof()函数的区别函数class()返回R对象的类:基本类、复合型的类、其他类(例如lm函数)、自定义类。如果要消除对象的类,则可用unclass()。R的面向对象特性。。。。。。查看类的属性值:attributes()。向量是最基本的数据结构,没有属性,返回空值。

R的面向对象特性多态:相同的函数使用不同类的对象时,R自动匹配调用不同的操作。具有多态性的函数,称为泛型函数,如plot()和print()。泛型函数#输入lmot就能将lmot的内容自动打印出来,是由于R的解释器发现lmot是lm类的对象,自动调用了print.lm()继承R的面向对象特性R语言有多种面向对象的方式:S3类型、S4类型和RC等S3和S4是基于泛型函数,而RC是完全的面向对象。S3类型:和大多数面向对象的语言(C#、JAVA、C++等)不一样,是一种基于泛型函数的面向对象方式。泛型函数可以根据传入对象的类型决定调用哪种具体的方法。容易理解和使用。S4类型:结构更加丰富,更加严格。使用setClass()函数来定义新的S4类型,用new()函数新建某个类的对象。谷歌R语言风格指南支持使用S3,S4。R语言的S3和S4类型S4编程特点setClass(Class="Person",representation(name="character",age="numeric"))setClass(Class="Reporter",representation(title="character"),contains="Person")chen<-new("Reporter",name="chen",age=20,title="RandOOP")chen在S3中使用$来访问一个对象的属性。在S4中使用@来访问属性,或使用slot()来查看属性。S4编程特点chen@nameslot(chen,"name")一个典型的R语言会话中,会产生大量的对象。使用一些函数用来管理这些对象。对象的管理ls()rm()save()load()exists()小结面向对象基础知识概念:对象、类特点:封装、多态、继承R语言与面向对象编程基础函数:class(),mode(),typeof()函数:unclass(),attributes()泛型函数:plot(),print()面向对象类型:S3,S4函数:setClass(),new(),slot()对象的管理:ls(),rm(),save(),load(),exists()…程序调试程序调试程序调试:是程序投入实际运行前进行测试,修正语法错误和逻辑错误的过程,是保证程序正确运行必不可少的步骤。各种原因都会导致程序运行结果和预期不符,根据测试时发现的错误,可进一步诊断,找出出错原因和具体的位置并进行修正。调试函数R语言的核心调试工具由“调试浏览器”构成,可以逐行运行代码并在运行过程中进行检查。调试浏览器可以通过debug()和browser()函数打开。R语言的调试工具针对单个函数,调用debug(f)来设置函数f()的调试状态,此后每次调用f()函数都将自动在函数入口处进入调试浏览器,调用undebug(f)可以取消函数的调试状态。另外,如果在f函数中的某一行加入一条browser()语句,那么浏览器只会在程序执行到这一行时才被打开,继而逐步调试代码,直到退出这个函数。R语言如何调试程序调试浏览器命令进入调试浏览器时,命令提示符将从>变为Browse[d]>(此处d表示函数调用链的深度)。在命令提示符之后可以输入以下命令:n(next):执行下一行,然后暂停,和“ENTER”键效果相同。c(continue):与n类似,但在下次暂停前可能会执行若干条语句。例如在循环中这条命令将会执行剩余的循环,直到退出循环才再次暂停。任意的R命令:浏览器仍然处于R的交互模式,因此可以任意地查看变量的取值,例如要查看变量x的取值,只需要输入x进行查看。where:输出一份栈跟踪路径,显示到达当前位置过程中的函数调用序列。Q:退出调试浏览器,回到R的主交互模式。R语言如何调试程序设置断点使用debug(f)函数会将browser()语句插入到f()的开始位置。然而在有些情况下程序错误发生在函数的中间位置,那么将代码从头到尾调试一遍会非常复杂,在此情况下可在代码的关键行设置断点,让程序暂停到预期的地方。设置断点主要有两种方法:一种是直接调用browser()函数:将browser函数设置在待检测代码前的某个位置,就可以达到设置断点的目的;另一种是使用setBreakpoint()函数:用于设置断点,会在源文件的第某行调用browser()函数。

R语言如何调试程序性能提升目录R语言:R中一些函数命令用C语言编写,编译型,可用机器代码快速运行。但对于有些函数,包括自编代码,是用纯粹的R语言编写,是解释型。R的会话中所有对象保存在内存中,一些大对象使用受限。R语言性能提升:通过向量化方式优化代码将消耗资源部分用编译型语言编写(如C)并行方式编写并运行使用GPU加速用向量化提升速度通过向量化方式,避免使用for循环循环中的函数调用:for,

“:”。调用函数可能会牵涉到创建堆栈帧等过程。若在每次循环中都有消耗,则费时较多。“用户”时间指运行此程序使用CPU的时间;“系统”时间指程序中执行系统指令等CPU时间;“流逝”时间则指实际执行时间。用向量化提升速度例:P26代码运行报告Rprof函数,是R语言核心包自带的性能数据日志函数,显示各函数的调用关系和CPU耗时的数据。summaryRprof函数,分析Rprof生成的日志数据,获得性能报告。profr库的plot函数,对报告进行可视化。file<-"1.out"Rprof(file)x<-runif(10000000)y<-runif(10000000)z<-vector(length=10000000)system.time(z<-x+y)system.time(for(iin1:length(x))z[i]<-x[i]+y[i])Rprof(NULL)summaryRprof()library(profr)plot(parse_rprof(file))编写能被R语言调用的C/C++代码使用C/C++代码的目的:提升程序的性能,特殊的I/O操作P28C代码编译运行编写能被R语言调用的C/C++代码P29writeLines("#include<math.h>#include<stdlib.h> voidadd(double*x,double*y,double*z){ inti=0; for(i=0;i<10000000;i++){ z[i]=x[i]+y[i]; }}","add.c")system("RCMDSHLIBadd.c")dyn.load(sprintf(“add%s”,.Platform$dynlib.ext))#加载system.time(.C(“add”,x,y,z)[[3]])#.C函数用来执行dyn.unload("add.dll")R语言的并行计算方式P30允许在多核单机或者是集群上,利用mpi,socket等消息传递进行并行snowfall基于MPI,即信息传递接口进行并行信息传递Rmpi通过类似la

温馨提示

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

评论

0/150

提交评论