R语言中的RC对象系统
来源:互联网 发布:劈叉的影响身高吗 知乎 编辑:程序博客网 时间:2024/06/07 20:37
R语言中常用的对象系统有S3、S4、RC、R6,其中S3和S4是基于泛型函数(generic function),而RC、R6是完全的面向对象。这里介绍RC对象系统。
RC是Reference classes的简称,又被称为R5,在R语言的2.12版本被引人,是R语言最新一代的面向对象系统。RC不同于原来的S3和S4对象系统,RC对象系统的方法是在类中自定的,而不是泛型函数。RC对象的行为更类似于其他的编程语言,实例化对象的语法也有所改变。但由于RC对象系统还是依赖于S4对象系统,我们可以简单地理解为RC是对S4的更进一步的面向对象封装。从面向对象的角度来说,我们下面要重定义以下几个名词。
类:面向对象系统的基本类型,类是静态结构定义;
对象:类实例化后,在内存中生成结构体;
方法:是类中的函数定义,不通过泛型函数实现。
在S3和S4对象系统中,我们实现对象的行为时,都是借助于泛型函数来实现的。这种实现方法的最大问题是,在定义时函数和对象的代码是分离的,需要在运行时,通过判断对象的类型完成方法调用。而在RC对象系统中,将method()方法定义在类的内部,通过实例化的对象完成方法调用。
定义一个Animal类,Cat、Dog、Duck继承于Animal,Animal有2个属性:name、limbs,2个方法:bark()、action(),其继承图表如图(1)所示:
用R3.2.3实现的代码如下:
//RC2a.R
# part1 -------------------------------------------------------------------rm(list = ls())##加载包library(pryr)##定义Animal类,Animal <- setRefClass("Animal", fields = list(name="character",limbs='numeric'), methods = list( initialize = function(name){ name <<- 'Animal' limbs <<- 4 }, bark = function() print("Animal::bark"), action = function() print("I can walk on the foot") ) )##定义Cat类,继承AnimalCat <- setRefClass("Cat",contains = "Animal", methods = list( initialize = function(name){ callSuper() name <<- 'cat' }, ##重写父类方法 bark = function() print(paste(name,"is miao miao")), action = function(){ callSuper() print("I can Climb a tree") } ) )##定义Dog类,继承AnimalDog <- setRefClass("Dog",contains = "Animal", methods = list( initialize = function(name){ callSuper() name <<- 'dog' }, ##重写父类方法 bark = function() print(paste(name,"is wang wang")), action = function(){ callSuper() print("I am Swim") } ) )##定义Duck类Duck <- setRefClass("Duck",contains = "Animal", fields = list(wing='numeric'), methods = list( initialize = function(name){ name <<- 'duck' limbs <<- 2 wing <<- 2 }, ##重写父类方法 bark = function() print(paste(name,"is ga ga")), action = function(){ callSuper() print("I am swim.") print("I also can fly a short way.") } ) )##实例化catcat <- Cat$new()cat$action()##实例化dogdog <- Dog$new()dog$action()##实例化duckduck <- Duck$new()duck$action()
效果如下:
1 0
- R语言中的RC对象系统
- R语言-RC系统
- R语言基于RC的面向对象编程
- R语言中的类和对象
- R 语言中的S3系统(笔记)
- R语言-S3系统
- R语言-S4系统
- R语言中的色彩
- R语言中的SVM
- R语言中的几种图
- R语言中的数据结构
- R语言中的方差分析
- R语言中的factor
- R语言中的引号
- 调整android系统中的init.rc
- 调整android系统中的init.rc
- R语言面向对象S4
- R语言面向对象指南
- Dijkstra's Shortest Path - C++ for C Programmers 2.5
- ArrayList Vector LinkedList HasMap等区别与用法
- RecyclerView 添加头部和尾部,并实现Item的点击事件
- ubuntu下php环境搭建
- C++ 中的const用法整理
- R语言中的RC对象系统
- 编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件
- Python配置第三方库Theano的曲折之路
- 划分数组,求最小差值
- android sdk无法更新的解决方法
- 程序员应该具有的品德与修为
- eclipse里报:An internal error occurred during: "Building workspace". Java heap space)
- Oracle修改字符集
- iOS - app的国际化