R – S4类

R – S4类

面向对象编程的系统是R中的S4系统。令人困惑的是,R至少支持三个独立的面向对象编程系统S3、S4和S5。它们遵循一个标准的过程来产生对象,并有一个明确的结构。这提高了我们代码的安全性,使我们不会无意中犯下简单的错误。

R编程语言中S4类的定义

在R语言中,成员变量被称为槽。一个类将拥有的名称和槽(连同槽的类别)必须被定义。比如说

setClass("Employee", slots=list(name="character", age="numeric", role="character"))

姓名、年龄和角色是我们建立的雇员类中的三个槽(成员变量)。

在R中创建S4对象

S4对象是用new()函数创建的。

employee1 <- new("Employee", name = "Sanket", age = 21, role = "Software Developer")

通过指定类名Student和new中三个槽的值,我们已经在new()中生成了对象student1。

例子。R中的S4类和对象

# create a class "Employee" with three member variables
setClass("Employee", slots=list(name="character",
                                age="numeric",
                                role="character"))
  
# create an object of class 
emp1 <- new("Employee", name = "Sanket",
                        age = 21,
                        role = "Software Developer")
  
# call emp1 object 
emp1

输出

An object of class "Employee"
Slot "name":
[1] "Sanket"

Slot "age":
[1] 21

Slot "role":
[1] "Software Developer"

在这里,我们使用setClass()方法建立了一个名为Employee的S4类。然后使用new()方法创建了一个名字为emp1的对象。

new("Employee", name = "Sanket", age = 21, role = "Software Developer")

这里。

  • name 接受 “字符 “值,所以我们传递了 “Sanket”。
  • age 接受 “数字 “值,所以我们传递了数字值21
  • role 接受 “字符 “值,所以,我们通过了 “软件开发人员”。

在R语言中访问S4类槽

在R语言中,我们使用@操作符来访问槽。比如说。

# access name slot of Employee class
emp1@name

例子。访问S4类插槽

# access name slot of Employee class
emp1@name
  
# access role slot of Employee
emp1@role 

输出

[1] "Sanket"
[1] "Software Developer"

这里。

  • Emp1访问雇员信息的姓名槽,输出 “Sanket”。
  • Emp1访问雇员信息的角色槽,输出 “软件开发人员”。

在R语言中修改S4类槽

在R语言中,我们可以通过使用@符号来访问一个槽并改变其值。例如。

# access and assign new value to role slot
emp1@role <- “Web Designer”

# print new slot value
emp1@role

这里,角色槽的值从 “软件开发人员 “改为 “网页设计师”。

例子。修改S4类槽

emp1@name
emp1@role
  
# access and assign new value to role slot
emp1@role <- "Web Designer"
  
emp1@role

输出

[1] "Sanket"
[1] "Software Developer"
[1] "Web Designer"

R中的S4泛型函数和方法

与S3类相似,S4类也有属于泛型函数的方法,而不是类本身。使用S4泛型的工作方式与使用S3泛型的工作方式颇为相似。要了解更多关于泛型的信息,请去访问S3泛型。

当我们在创建完类的对象后,只是在交互式模式下输入对象的名字,该对象就会被打印出来。S4的泛型函数显示就是用来做这个的。这个函数在上面的列表中显示。相当于S3 print()函数的S4函数是这个函数。
# call object without show()
emp1

# call object with show()
show(emp1)

输出

An object of class "Employee"
Slot "name":
[1] "Sanket"

Slot "age":
[1] 21

Slot "role":
[1] "Software Developer"

这里,在这两种情况下,输出结果将与上面所示相同。

例子。检查一个函数是否是通用函数

isS4(print)
# Output: [1] FALSE

isS4(show)
# Output: [1] TRUE

这里,isS4()函数被用来确定一个函数是否是S4通用函数。由于该函数对print返回FALSE,对show返回TRUE,如果后者是一个S4通用函数。

在R中编写自己的方法

在R的setMethod()函数的帮助下,我们可以创建自己的方法。例如,我们可以使用下面的代码为display()泛型构建我们的类函数。

# create own method
setMethod("show",
"Employee",
  
function(object) {
cat(object@name, "\n")
cat(object@age, "years old\n")
cat("Role:", object@role, "\n")
}
)
  
# call employee1 object 
emp1

输出

Sanket 
21 years old
Role: Software Developer

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程