国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【轉(zhuǎn)載】R語(yǔ)言 面向?qū)ο缶幊?/h1>

這篇具有很好參考價(jià)值的文章主要介紹了【轉(zhuǎn)載】R語(yǔ)言 面向?qū)ο缶幊?。希望?duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

轉(zhuǎn)載自:R語(yǔ)言教程

面向?qū)ο蟮木幊虃?cè)重于數(shù)據(jù)和對(duì)象,而不是程序。面向?qū)ο蟮哪P陀兄谖覀儗?duì)現(xiàn)實(shí)生活中的對(duì)象進(jìn)行建模。為了在數(shù)據(jù)科學(xué)領(lǐng)域出類(lèi)拔萃,掌握面向?qū)ο蟮木幊谈拍詈苤匾C總€(gè)程序都有特殊類(lèi)型的類(lèi)。在本教程中,將重點(diǎn)討論R語(yǔ)言中的S3和S4類(lèi)、泛型函數(shù)、類(lèi)之間的繼承性和多態(tài)性。在本教程中,我們將討論R中面向?qū)ο蟮木幊谈拍?/p>

R中的面向?qū)ο缶幊?/h2>

面向?qū)ο缶幊淌且环N圍繞著類(lèi)和對(duì)象而不是函數(shù)的編程模式。在R中,我們還可以創(chuàng)建兩種特殊類(lèi)型的類(lèi),即S3和S4。OOPS的概念使我們能夠創(chuàng)建模塊化的作品,作為大型系統(tǒng)的構(gòu)建塊。S3和S4是面向?qū)ο缶幊讨械膬蓚€(gè)重要類(lèi)。S3類(lèi)允許重載任何函數(shù)。S4類(lèi)與S3略有不同,它包含用于定義方法和泛型的輔助函數(shù)。

R中的類(lèi)和對(duì)象

類(lèi)是一種用戶(hù)定義的數(shù)據(jù)類(lèi)型,對(duì)象就是從這種類(lèi)型中創(chuàng)建的。它們有時(shí)也被稱(chēng)為藍(lán)圖。這是因?yàn)樗鼈兌x了對(duì)象的結(jié)構(gòu)。一個(gè)類(lèi)是一個(gè)被動(dòng)的實(shí)體,而一個(gè)對(duì)象是一個(gè)主動(dòng)的實(shí)體。

R認(rèn)為所有事物都是對(duì)象。一個(gè)對(duì)象是一個(gè)類(lèi)的單一實(shí)例。R為我們提供了一個(gè)class()函數(shù),它既可以用來(lái)定義一個(gè)函數(shù)的類(lèi),也可以為一個(gè)已經(jīng)定義的對(duì)象獲取類(lèi)的信息。

R中的類(lèi)是以矢量形式存在的。由于這個(gè)屬性,對(duì)象可以繼承許多類(lèi),而且我們還可以指定繼承的順序,即使是復(fù)雜的類(lèi)。

示例

Names <-c("Bhuwanesh","Jai", "Piyush", "Anil", "Hitesh", "Naveen")
print(class(Names))

輸出

[1] "character"

由于該類(lèi)元素屬于字符類(lèi),因此顯示了 “字符”。

示例

現(xiàn)在讓我們看看如何追加一個(gè)對(duì)象的類(lèi)別–

Names <-c("Bhuwanesh", "Jai", "Piyush", "Anil", "Hitesh", "Naveen")
class(Names)<-append(class(Names), "boys")
print(class(Names))

輸出

[1] "character" "boys"

正如你在輸出中看到的,我們已經(jīng)附加了向量的類(lèi)別。

R中的類(lèi)

S3 Class

S3類(lèi)是R中最常用的類(lèi)之一。這個(gè)類(lèi)很容易實(shí)現(xiàn),許多預(yù)定義的類(lèi)都是這種類(lèi)型。

一個(gè)S3類(lèi)的對(duì)象是一個(gè)列表,該列表具有用一些名稱(chēng)分配的類(lèi)屬性。列表的組成部分由對(duì)象的成員變量表示。

創(chuàng)建S3類(lèi)

我們可以通過(guò)以下步驟創(chuàng)建一個(gè)S3對(duì)象—-。

  • 編制一份具有所需組件價(jià)值的清單。
  • 然后,我們可以使用class()函數(shù)輕松地創(chuàng)建一個(gè)類(lèi),同時(shí)給這個(gè)類(lèi)附加一個(gè)名字。

示例

# 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"

通用功能

我們?cè)赗中擁有通用函數(shù),可以達(dá)到多態(tài)性的目的(就像許多其他哎呀語(yǔ)言:C++,Java等)。

多態(tài)性?是指形式。它指出,一條信息可以有一個(gè)以上的不同形式,或者它可以為不同的目的服務(wù)。

例如,在R語(yǔ)言中,summary()函數(shù)是一個(gè)由許多summary()函數(shù)組成的集合,可以用于不同的數(shù)據(jù)類(lèi)型和數(shù)據(jù)結(jié)構(gòu)。這類(lèi)函數(shù)根據(jù)作為參數(shù)傳遞的對(duì)象的類(lèi)型,調(diào)用一個(gè)適當(dāng)?shù)暮瘮?shù)。我們可以使用methods()函數(shù)看到summary()函數(shù)的各種實(shí)現(xiàn)。

methods(summary)

我們可以在R中創(chuàng)建我們自己的通用函數(shù)。讓我們考慮以下程序,它創(chuàng)建了一個(gè)名為 “myList “的列表,然后從中創(chuàng)建一個(gè)類(lèi)。

示例

現(xiàn)在我們使用summary()函數(shù)來(lái)顯示這個(gè)類(lèi)的摘要 –

# 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

屬性

屬性是與一個(gè)對(duì)象相關(guān)的額外信息,用于處理該對(duì)象。我們可以使用 attributes() 函數(shù)來(lái)獲取一個(gè)對(duì)象的屬性。

示例

# 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()函數(shù)的幫助下將我們自己的屬性應(yīng)用到一個(gè)對(duì)象上,讓我們考慮下面的例子來(lái)說(shuō)明這個(gè)函數(shù)的工作原理

示例

# 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類(lèi)中的繼承性

繼承性?是面向?qū)ο缶幊陶Z(yǔ)言的最重要支柱之一,它允許一個(gè)類(lèi)繼承另一個(gè)類(lèi)的屬性。這一特點(diǎn)帶來(lái)了代碼可重用性等好處。

S3類(lèi)并不包含任何特定的定義模式。

示例

# 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"

正如你在輸出中看到的,”學(xué)院 “類(lèi)繼承了 “大學(xué) “類(lèi)。

現(xiàn)在讓我們嘗試使用基類(lèi) “大學(xué) “的一個(gè)對(duì)象來(lái)訪(fǎng)問(wèn)和修改基類(lèi) “大學(xué) “的組件-

示例

# 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允許我們使用另一種特殊的類(lèi),稱(chēng)為 “S4 “類(lèi)。這個(gè)類(lèi)包含預(yù)定義的定義。這個(gè)類(lèi)包含定義方法和泛型的函數(shù)。這個(gè)類(lèi)還為我們提供了定義泛型和方法的輔助函數(shù)。

setClass()函數(shù)創(chuàng)建了一個(gè)S4類(lèi)。R為我們提供了new()函數(shù),用來(lái)創(chuàng)建一個(gè)S4類(lèi)的對(duì)象—-。

示例

# 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類(lèi)中的繼承性

繼承是面向?qū)ο缶幊陶Z(yǔ)言的最重要支柱之一,它允許一個(gè)類(lèi)繼承另一個(gè)類(lèi)的屬性。這一特性帶來(lái)了代碼可重用性等好處。

S4類(lèi)包含了一個(gè)適當(dāng)?shù)哪J絹?lái)定義它。派生類(lèi)有足夠的能力來(lái)繼承基類(lèi)的屬性和方法。為了達(dá)到這個(gè)目的,我們可以

示例

# 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

結(jié)論

在這篇文章中,我們討論了與R相關(guān)的面向?qū)ο蟮木幊谈拍?,并?duì)S3和S4等類(lèi)進(jìn)行了詳細(xì)的討論。我們相信,這個(gè)教程肯定會(huì)增強(qiáng)你在數(shù)據(jù)科學(xué)領(lǐng)域的知識(shí)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-807382.html

到了這里,關(guān)于【轉(zhuǎn)載】R語(yǔ)言 面向?qū)ο缶幊痰奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包