1 S4类
S4类是R语言中一种更为严格和复杂的面向对象编程方式。与更简单的S3类相比,S4类提供了更高的灵活性和严格性,适用于需要明确结构的复杂数据和应用场景。
更为详细的介绍:https://www.jianshu.com/p/dd181f0698a7
1.1 S4类的主要特点
- 严格的数据类型检查:在S4类中,每个对象的属性(称为“槽”)的类型必须明确指定。这意味着在创建对象时,R会强制检查类型是否匹配,从而减少类型相关的错误。
- 类的定义:S4类需要通过
setClass()
函数来显式定义。类定义中需要明确指定类的名称、包含的槽(属性)以及各个槽的类型。 - 方法的定义:S4类的方法是通过
setMethod()
函数定义的。与S3类不同,S4类的方法是基于签名(即输入参数的类型)来选择的,这使得方法的选择更加精准。 - 构造函数:可以使用
new()
函数来创建S4类的对象。new()
函数会根据类的定义来检查并创建对象,确保每个槽都满足类定义中的要求。 - 继承关系:S4类支持多重继承,允许一个类继承多个父类的属性和方法。这使得S4类在复杂的数据结构建模中非常有用。
1.2 S4类的定义示例
下面是一个简单的S4类定义示例:
# 定义一个名为Person的S4类 setClass( Class = "Person", slots = list( name = "character", age = "numeric" ) ) # 定义一个构造方法 setMethod( "initialize", "Person", function(.Object, name, age) { .Object@name <- name .Object@age <- age return(.Object) } ) # 创建一个Person对象 p <- new("Person", name = "John Doe", age = 30) # 访问S4对象的槽 p@name p@age
在这个示例中,Person类有两个槽:name(字符型)和age(数值型)。我们使用setClass()函数定义了这个类,并用new()函数创建了一个Person对象。访问S4对象的槽时,使用@
符号。
REF
https://cloud.tencent.com.cn/developer/article/2448519
============================
============================
============================
============================
# 定义一个名为Person的S4类 setClass( Class = "Person", slots = list( name = "character", age = "numeric" ) ) # 定义一个构造方法 setMethod( "initialize", "Person", function(.Object, name, age) { .Object@name <- name .Object@age <- age return(.Object) } ) # 创建一个Person对象 p <- new("Person", name = "John Doe", age = 30) # 访问S4对象的槽 p@name p@age
标签:定义,age,Object,name,Person,S4,语言 From: https://www.cnblogs.com/emanlee/p/18487402