R语言 类

R语言 类

类和对象是面向对象编程的基本概念,围绕着现实生活中的实体。R语言中的所有东西都是一个对象。一个 对象 只是一个数据结构,它有一些方法和属性。 只是这些对象的一个蓝图或草图。它代表了一种类型的所有对象所共有的属性或方法的集合。

与其他大多数编程语言不同,R有一个三类系统。它们是S3、S4和参考类。

S3类

S3是最简单但也是最流行的OOP系统,它缺乏正式的定义和结构。这种类型的对象只需添加一个属性就可以创建。下面是一个例子,可以让事情变得更清楚。

例子

# create a list with required components
movieList <- list(name = "Iron man", leadActor = "Robert Downey Jr")
  
# give a name to your class
class(movieList) <- "movie"
  
movieList

输出

$name
[1] "Iron man"
$leadActor
[1] "Robert Downey Jr"

在S3系统中,方法不属于类。它们属于通用函数。这意味着我们不能在这里创建我们自己的方法,就像我们在其他编程语言如C++或Java中所做的那样。但我们可以定义一个泛型方法(例如打印)应用于我们的对象时的作用。

print(movieList)

输出

$name
[1] "Iron man"
$leadActor
[1] "Robert Downey Jr"

例子。创建一个用户定义的打印函数

# now let us write our method
print.movie <- function(obj)
{
    cat("The name of the movie is", objname,".\n")
    cat(objleadActor, "is the lead actor.\n")
}

输出

The name of the movie is Iron man .
Robert Downey Jr is the lead actor.

S4类

像C++、Java等其他语言的程序员可能会发现S3与他们对类的正常想法有很大的不同,因为它缺乏类应该提供的结构。S4比S3稍有改进,因为它的对象有一个合适的定义,并且给它的对象提供了一个合适的结构。

例子

library(methods)
  
# definition of S4 class
setClass("movies", slots=list(name="character", leadActor = "character"))
  
# creating an object using new() by passing class name and slot values
movieList <- new("movies", name="Iron man", leadActor = "Robert Downey Jr")
movieList

输出

An object of class "movies"
Slot "name":
[1] "Iron man"
Slot "leadActor":
[1] "Robert Downey Jr"

如上例所示, setClass() 被用来定义一个类, new() 被用来创建对象。

S4中方法的概念与S3类似,即它们属于通用函数。下面的例子展示了如何创建一个方法。

movieList

输出

An object of class "movies"
Slot "name":
[1] "Iron man"

Slot "leadActor":
[1] "Robert Downey Jr"

例子

# using setMethod to set a method
setMethod("show", "movies",
function(object) 
{
    cat("The name of the movie is ", object@name, ".\n")
    cat(object@leadActor, "is the lead actor.\n")
}
)
movieList

输出

[1] "show"
The name of the movie is  Iron man .
Robert Downey Jr is the lead actor.

参考类

参考类是对S4类的一种改进。这里的方法属于类。这些与其他语言的面向对象的类非常相似。

定义一个参考类与定义S4类相似。我们使用 setRefClass() 而不是 setClass() ,使用 “字段 “而不是 “槽”。

例子

library(methods)
   
# setRefClass returns a generator 
movies <- setRefClass("movies", fields = list(name = "character",
                       leadActor = "character", rating = "numeric"))
  
#now we can use the generator to create objects
movieList <- movies(name = "Iron Man", 
                    leadActor = "Robert downey Jr", rating = 7)
movieList

输出

Reference class object of class "movies"
Field "name":
[1] "Iron Man"
Field "leadActor":
[1] "Robert downey Jr"
Field "rating":
[1] 7

现在让我们通过一个例子来看看如何给我们的类添加一些方法。

例子

library(methods)
  
movies <- setRefClass("movies", fields = list(name = "character", 
                       leadActor = "character", rating = "numeric"), methods = list(
                       increment_rating = function()
                       {
                           rating <<- rating + 1
                       },
                       decrement_rating = function()
                       {
                           rating <<- rating - 1
                       }
                     ))
movieList <- movies(name = "Iron Man", 
                    leadActor = "Robert downey Jr", rating = 7)
  
# print the value of rating
movieListrating
  
# increment and then print the rating
movieListincrement_rating()
movieListrating
  
# decrement and print the rating
movieListdecrement_rating()
movieList$rating

输出

[1] 7
[1] 8
[1] 7

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程