轉載自:R語言教程
面向物件的編程側重于資料和物件,而不是程式,面向物件的模型有助于我們對現實生活中的物件進行建模,為了在資料科學領域出類拔萃,掌握面向物件的編程概念很重要,每個程式都有特殊型別的類,在本教程中,將重點討論R語言中的S3和S4類、泛型函式、類之間的繼承性和多型性,在本教程中,我們將討論R中面向物件的編程概念
R中的面向物件編程
面向物件編程是一種圍繞著類和物件而不是函式的編程模式,在R中,我們還可以創建兩種特殊型別的類,即S3和S4,OOPS的概念使我們能夠創建模塊化的作品,作為大型系統的構建塊,S3和S4是面向物件編程中的兩個重要類,S3類允許多載任何函式,S4類與S3略有不同,它包含用于定義方法和泛型的輔助函式,
R中的類和物件
類是一種用戶定義的資料型別,物件就是從這種型別中創建的,它們有時也被稱為藍圖,這是因為它們定義了物件的結構,一個類是一個被動的物體,而一個物件是一個主動的物體,
R認為所有事物都是物件,一個物件是一個類的單一實體,R為我們提供了一個class()函式,它既可以用來定義一個函式的類,也可以為一個已經定義的物件獲取類的資訊,
R中的類是以矢量形式存在的,由于這個屬性,物件可以繼承許多類,而且我們還可以指定繼承的順序,即使是復雜的類,
示例
Names <-c("Bhuwanesh","Jai", "Piyush", "Anil", "Hitesh", "Naveen")
print(class(Names))
輸出
[1] "character"
由于該類元素屬于字符類,因此顯示了 “字符”,
示例
現在讓我們看看如何追加一個物件的類別–
Names <-c("Bhuwanesh", "Jai", "Piyush", "Anil", "Hitesh", "Naveen")
class(Names)<-append(class(Names), "boys")
print(class(Names))
輸出
[1] "character" "boys"
正如你在輸出中看到的,我們已經附加了向量的類別,
R中的類
S3 Class
S3類是R中最常用的類之一,這個類很容易實作,許多預定義的類都是這種型別,
一個S3類的物件是一個串列,該串列具有用一些名稱分配的類屬性,串列的組成部分由物件的成員變數表示,
創建S3類
我們可以通過以下步驟創建一個S3物件—-,
- 編制一份具有所需組件價值的清單,
-
然后,我們可以使用class()函式輕松地創建一個類,同時給這個類附加一個名字,
示例
# Creating list
myList <- list(Name ="Bhuwanesh", Enrollment_Number = 3496303119,
Course = "Btech", Branch = "Information Technology")
# class
class(myList) <- "University"
myList
輸出
$Name
[1] "Bhuwanesh"
$Enrollment_Number
[1] 3496303119
$Course
[1] "Btech"
$Branch
[1] "Information Technology"
attr(,"class")
[1] "University"
通用功能
我們在R中擁有通用函式,可以達到多型性的目的(就像許多其他哎呀語言:C++,Java等),
多型性 是指形式,它指出,一條資訊可以有一個以上的不同形式,或者它可以為不同的目的服務,
例如,在R語言中,summary()函式是一個由許多summary()函陣列成的集合,可以用于不同的資料型別和資料結構,這類函式根據作為引數傳遞的物件的型別,呼叫一個適當的函式,我們可以使用methods()函式看到summary()函式的各種實作,
methods(summary)
我們可以在R中創建我們自己的通用函式,讓我們考慮以下程式,它創建了一個名為 “myList “的串列,然后從中創建一個類,
示例
現在我們使用summary()函式來顯示這個類的摘要 –
# Create a list
myList <- list(Name ="Bhuwanesh",
Enrollment_Number = 3496303119,
Course = "Btech",
Branch = "Information Technology")
# Define the class
class(myList) <- "University"
# Display the summary
print(summary(myList))
輸出
Length Class Mode
Name 1 -none- character
Enrollment_Number 1 -none- numeric
Course 1 -none- character
Branch 1 -none- character
屬性
屬性是與一個物件相關的額外資訊,用于處理該物件,我們可以使用 attributes() 函式來獲取一個物件的屬性,
示例
# Create a list
myList <- list(Name ="Bhuwanesh",
Enrollment_Number = 3496303119,
Course = "Btech",
Branch = "Information Technology")
# Define a class
class(myList) <- "University"
# Display attributes
print(attributes(myList))
輸出
$names
[1] "Name" "Enrollment_Number" "Course"
[4] "Branch"
$class
[1] "University"
我們也可以在attr()函式的幫助下將我們自己的屬性應用到一個物件上,讓我們考慮下面的例子來說明這個函式的作業原理
示例
# Create a list
myList <- list(Name ="Bhuwanesh",
Enrollment_Number = 3496303119,
Course = "Btech",
Branch = "Information Technology")
# Define class
class(myList) <-"University"
# Defining custom attributes
attr(myList,"Grade")<-c('A')
# Display attribute
print(attributes(myList))
輸出
$names
[1] "Name" "Enrollment_Number" "Course"
[4] "Branch"
$class
[1] "University"
$Grade
[1] "A"
S3類中的繼承性
繼承性 是面向物件編程語言的最重要支柱之一,它允許一個類繼承另一個類的屬性,這一特點帶來了代碼可重用性等好處,
S3類并不包含任何特定的定義模式,
示例
# Create a list
myList1 <- list(Name ="Bhuwanesh", Enrollment_Number = 3496303119,
Course = "Btech", Branch = "Information Technology")
# Define the class
class(myList1) <- "University"
# Create a list
myList2 <- list(College_Rank = 14, State = 'Uttarakhand')
# Define the inheritance relation
class(myList2) <- c("College", "University")
print(myList2)
輸出
$College_Rank
[1] 14
$State
[1] "Uttarakhand"
attr(,"class")
[1] "College" "University"
正如你在輸出中看到的,”學院 “類繼承了 “大學 “類,
現在讓我們嘗試使用基類 “大學 “的一個物件來訪問和修改基類 “大學 “的組件-
示例
# Create a list
myList1 <- list(Name ="Bhuwanesh", Enrollment_Number = 3496303119,
Course = "Btech", Branch = "Information Technology")
# Define a class
class(myList1) <- "University"
myList2 <- list(College_Rank = 14, State = 'Uttarakhand')
class(myList2) <- c("College", "University")
# Define the attribute
myList2$Name = "Harshit"
print(myList2)
輸出
$College_Rank
[1] 14
$State
[1] "Uttarakhand"
$Name
[1] "Harshit"
attr(,"class")
[1] "College" "University"
你可以在輸出中看到,”姓名 “屬性已被修改為 “Harshit”,
S4 Class
R允許我們使用另一種特殊的類,稱為 “S4 “類,這個類包含預定義的定義,這個類包含定義方法和泛型的函式,這個類還為我們提供了定義泛型和方法的輔助函式,
setClass()函式創建了一個S4類,R為我們提供了new()函式,用來創建一個S4類的物件—-,
示例
# Define a list
myList1 <- list(Name ="Bhuwanesh",
Enrollment_Number = 3496303119,
Course = "Btech",
Branch = "Information Technology")
# Set the class
setClass("University", slots = list(Name ="character",
Enrollment_Number = "numeric",
Course = "character",
Branch = "character"))
# Define the object
myObject <- new("University",
Name = "Bhuwanesh Nainwal",
Enrollment_Number = 3496303119,
Course = "Btech",
Branch = "Information Technology")
print(myObject)
輸出
An object of class "University"
Slot "Name":
[1] "Bhuwanesh Nainwal"
Slot "Enrollment_Number":
[1] 3496303119
Slot "Course":
[1] "Btech"
Slot "Branch":
[1] "Information Technology"
S4類中的繼承性
繼承是面向物件編程語言的最重要支柱之一,它允許一個類繼承另一個類的屬性,這一特性帶來了代碼可重用性等好處,
S4類包含了一個適當的模式來定義它,派生類有足夠的能力來繼承基類的屬性和方法,為了達到這個目的,我們可以
示例
# Set class
setClass("University",
slots = list(Name = "character",
Enrollment_Number = "numeric",
Branch = "character")
)
# Set methods
setMethod("show", "University",
function(object){
cat(object@Name, "
")
cat(object@Enrollment_Number, "
")
cat(object@Branch, "
")
}
)
# Inherit
setClass("College",
slots = list(Grade= "character"),
contains = "University"
)
# Define the object
object <- new("College", Name = "Bhuwanesh Nainwal",
Branch="Information Technology",
Enrollment_Number = 3496303119)
# Display the object
show(object)
輸出
Bhuwanesh Nainwal
3496303119
Information Technology
結論
在這篇文章中,我們討論了與R相關的面向物件的編程概念,并對S3和S4等類進行了詳細的討論,我們相信,這個教程肯定會增強你在資料科學領域的知識,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/543059.html
標籤:R