R语言学习笔记——R语言面向对象编程系列2
近在看任坤大神的新作——《R语言编程指南》,其中对于编程语言中非常流行的面向对象编程范式(OOP)在R语言中的实现进行了非常详尽的讲解,强烈推荐各位有志于进阶R语言编程的小伙伴儿进行阅读。
R语言内目前可以实现OOP范式的一共有四套标准:S3、S4、RC、R6,其中关于S3、S4两种范式在早期的各种扩展包中使用比较多,是基于泛型函数而实现的,之前在学习Python的面向对象编程系列时曾经做过粗浅的练习:
左手用R右手Python系列——面向对象编程基础
S3与S4之间的差异:
1.在定义S3类的时候,没有显式的定义过程,而定义S4类的时候需要调用函数setClass;
2.在初始化S3对象的时候,只是建立了一个list,然后设置其class属性,而初始化S4对象时需要使用函数new;
3.提取变量的符号不同,S3为$,而S4为@;
4.在应用泛型函数时,S3需要定义f.classname,而S4需要使用setMethod函数;
5.在声明泛型函数时,S3使用UseMethod(), 而S4使用setGeneric()。
S3的范式存在很大的隐患,对于类与对象的定义都不够严谨,S4范式在很大程度上弥补了S3的缺陷,但是在实现方式和方法分派上与主流的面向对象语言仍然存在很大的差距,方法分配、类与方法的定义都是割裂独立执行的,在封装上非常不方便,而RC以及在RC基础上进一步发展的R6标准已经逐步开始接近主流编程语言中面向对象的实现模式。
RC 是一种具有引用语义的类系统,它更像其他面向对象编程语言中的类系统。
它将所有的类属性及对应方法都封装在一个实例生成器中,通过生成器可以生成需要的实例,进而执行对应的类方法。在方法中修改字段的值,需要用<<-
。
以下是使用RC引用类实现的一个小爬虫:
#加载扩展包
library("RCurl")
library("XML")
library("magrittr")
相关文章