R – S4类
面向对象编程的系统是R中的S4系统。令人困惑的是,R至少支持三个独立的面向对象编程系统S3、S4和S5。它们遵循一个标准的过程来产生对象,并有一个明确的结构。这提高了我们代码的安全性,使我们不会无意中犯下简单的错误。
R编程语言中S4类的定义
在R语言中,成员变量被称为槽。一个类将拥有的名称和槽(连同槽的类别)必须被定义。比如说
姓名、年龄和角色是我们建立的雇员类中的三个槽(成员变量)。
在R中创建S4对象
S4对象是用new()函数创建的。
通过指定类名Student和new中三个槽的值,我们已经在new()中生成了对象student1。
例子。R中的S4类和对象
输出
在这里,我们使用setClass()方法建立了一个名为Employee的S4类。然后使用new()方法创建了一个名字为emp1的对象。
这里。
- name 接受 “字符 “值,所以我们传递了 “Sanket”。
- age 接受 “数字 “值,所以我们传递了数字值21
- role 接受 “字符 “值,所以,我们通过了 “软件开发人员”。
在R语言中访问S4类槽
在R语言中,我们使用@
操作符来访问槽。比如说。
# access name slot of Employee class
emp1@name
例子。访问S4类插槽
输出
这里。
- 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类槽
输出
R中的S4泛型函数和方法
与S3类相似,S4类也有属于泛型函数的方法,而不是类本身。使用S4泛型的工作方式与使用S3泛型的工作方式颇为相似。要了解更多关于泛型的信息,请去访问S3泛型。
当我们在创建完类的对象后,只是在交互式模式下输入对象的名字,该对象就会被打印出来。S4的泛型函数显示就是用来做这个的。这个函数在上面的列表中显示。相当于S3 print()函数的S4函数是这个函数。
# call object without show()
emp1
# call object with show()
show(emp1)
输出
这里,在这两种情况下,输出结果将与上面所示相同。
例子。检查一个函数是否是通用函数
这里,isS4()函数被用来确定一个函数是否是S4通用函数。由于该函数对print返回FALSE,对show返回TRUE,如果后者是一个S4通用函数。
在R中编写自己的方法
在R的setMethod()函数的帮助下,我们可以创建自己的方法。例如,我们可以使用下面的代码为display()泛型构建我们的类函数。
输出