R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。
R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。
要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让我们一起动起来吧,开始R的极客理想。
关于作者:
- 张丹(Conan), 程序员Java,R,PHP,Javascript
- weibo:@Conan_Z
- blog: http://blog.fens.me
- email: bsspirit@gmail.com
转载请注明出处:
http://blog.fens.me/r-class-r6/
前言
R6是什么?听说过S3、S4和RC(R5)的面向对象类型 ,R6难道是一种新的类型吗?
其实,我也是在无意中发现R6的。R6是R语言的一个面向对象的R包,R6类型非常接近于RC类型(Reference classes),但比RC类型更轻,由于R6不依赖于S4的对象系统,所以用R6的构建面向对象系统会更加有效率。
目录
- 初识R6
- 创建R6类和实例化对象
- R6类的主动绑定
- R6类的继承关系
- R6类的对象的静态属性
- R6类的可移植类型
- R6类的动态绑定
- R6类的打印函数
- 实例化对象的存储
- R6面向对象系统的案例
1. 初识R6
R6是一个单独的R包,与我们熟悉的原生的面向对象系统类型S3,S4和RC类型不一样。在R语言的面向对象系统中,R6类型与RC类型是比较相似的,但R6并不基于S4的对象系统,因此我们在用R6类型开发R包的时候,不用依赖于methods包,而用RC类型开发R包的时候则必须设置methods包的依赖,在发布gridgame游戏包 文章中,就会出现RC依赖于methods包的使用情况。
R6类型比RC类型更符合其他编程对于面向对象的设置,支持类的公有成员和私有成员,支持函数的主动绑定,并支持跨包的继承关系。由于RC类型的面向对象系统设计并不彻底,所以才会有R6这样的包出现。下面就让我们体会一下,基于R6面向对象系统编程吧。
2. 创建R6类和实例化对象
本文的系统环境
- Win7 64bit
- R: 3.1.1 x86_64-w64-mingw32/x64 (64-bit)
我们先安装R6包,同时为了方便我们检查对象的类型,引入pryr包作为辅助工具。关于pryr包的介绍,请参看撬动R内核的高级工具包pryr一文。
~ R # 启动R程序
> install.packages("R6") # 安装R6包
> library(R6) # 加载R6包
> library(pryr) # 加载pryr包
注:R6同时支持Win7环境和Linux环境
2.1 如何创建R6类?
R6对象系统是以类为基本类型, 有专门的类的定义函数 R6Class() 和 实例化对象的生成方法,下面我们用R6对象系统创建一个类。
先查看R6的类创建函数R6Class()函数的定义。
> R6Class
function (classname = NULL, public = list(), private = NULL,
active = NULL, inherit = NULL, lock = TRUE, class = TRUE,
portable = TRUE, parent_env = parent.frame())
参数列表:
- classname 定义类名。
- public 定义公有成员,包括公有方法和属性。
- private 定义私有成员,包括私有方法和属性。
- act