R 主要面向统计计算,似乎很少会用到面向对象的编程方法。但在统计计算中,在下列情形中使用面向对象的编程方法可以编程更有效率。
R 的面向对象 (OOP) 是基于泛型函数 (generic function) 的,而不是基于类层次结构
1 | library(R6) |
参数列表:
classname:定义类名。
public:定义公有成员,包括公有方法和属性。
privat:定义私有成员,包括私有方法和属性。
active :主动绑定的函数列表。
inherit:定义父类,继承关系。
lock:是否上锁,如果上锁则用于类变量存储的环境空间被锁定
class:是否把属性封装成对象,默认是封装,如果选择不封装,类中属性存存在一个环境空间中。
portable:是否为可移植类型,默认是可移植型类,类中成员访问需要用调用self和private对象。
parent_env:定义对象的父环境空间。
1 | `$new()` # 实例化函数 |
面向对象S4类
大专栏 R手册(Common)--R6 and S4"#自定义s4类"> 自定义S4类
1 | myClass <-setClass(Class, slots=list(),prototype,contains=character(), validity) ) |
属性用@访问
参数列表
Class: 定义类名
slots: 定义属性和属性类型,列表
prototype: 定义属性的默认值
contains: 定义父类,继承关系
validity: 定义属性的类型检查
实例化函数
1 | new(Class,...) |
S4的泛型函数
- 通过
setGeneric()
来定义接口
1 | setGeneric(name,def) |
- 通过setMethod()来定义现实类
1 | setMethod(f,signature=character(),definition) |