R语言 S3系统

本文介绍了R语言中的S3系统,它是一种面向对象编程方式。通过泛型函数处理语言的歧义性,实现根据传入对象类型执行不同操作。文章详细讲解了类、对象、实例化、方法定义以及S3系统的优点和缺点。通过实例展示了如何创建和使用类,包括子类和超类,以及如何定义和调用方法。
摘要由CSDN通过智能技术生成

R-S3

为什么要有泛型?

语言是有歧义性的(ambiguity),有时需要通过上下文来判断某个单词是什么意思。但是这很有用,我们可以用更少的词汇去阐述一件事。我们可以发现在R中也有许多例子,用于绘图的plot()函数所绘制的图非常取决于我们传递给plot()什么类型的数据。R语言引入泛型函数(generic functions)来处理歧义。

OOP

R语言的S3也是一种面向对象编程(OOP, Object-Oriented Programming),因为发生的动作(action)是由作为参数( argument)传递的对象(object)决定的。

Class

为了实现OOP,我们需要一种方法,让我们可以创建全新类型的对象(object),“类”(class)系统应运而生。要注意由于OOP是在R诞生后才引入的,所以并不是所有R对象都是class系统定义的。但是所有的R对象都有一个隐含(implied)的类,可以用class函数获得。

Objects classes

举几个例子:
向量(Vector)的class有4种,logicalnumericcharacter and complex
矩阵 (Matrix)可能有一个隐含类:array,如下所示

> class(matrix(1:4, nc = 2))
[1] "matrix" "array"

> class(matrix(letters[1:4], nc = 2))
[1] "matrix" "array"

虽然这两个对象的基本模式(underlying modes)不同,但是都被视为matrix

实例化讲解

  1. 创建一个列表备用
pts <- list(
	x = round(rnorm(5), 2),
	y = round(rnorm(5), 2))
  1. 为其附加一个类“coords”
class(pts) <- "coords"
  1. 构造函数并生成一个对象实例
coords <- function(x, y) {
   
	#加入一些约束,比如x和y要有相同长度
	if (length(x) != length(y))
		stop("coordinate lengths differ")
	#创建这个类的一个实例,并附上类名“coords”
	pts <- list(x = x, y = y)
	class(pts) <- "coords"
	pts
}

pts <- coords(x = round(rnorm(5), 2), y = round(rnorm(5), 2))
pts
  1. 废弃类信息(discard)
unclass(pts)
  1. 访问器,提取器(Accessor,extractor)
    以便返回类实例中的某组件
    这比每次都要通过$提取出某一对象的某一组件要好很多
xcoords <- function(obj) obj$x
ycoords <- 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值