前往
大廳
主題

在R應用物件導向設計創造新類別

光山アキラやま | 2023-07-20 20:20:28 | 巴幣 1004 | 人氣 117

R的原生物件類型包含了list dataframe vector等三種

雖然list 本身就能組合出很複雜的物建類型了,但每次都要創建一個LIST有點麻煩。
如果能象JS那樣創立prototype,繼承屬性會很有用。

R本身是有內建OOP的功能的,R裡面提供的物件有S3 S4 RC

S3提供語法糖和自動判別的功能
S4型必須要嚴格定義

我這邊舉個S4的例子,假設我想要把Minecraft的地圖建檔分析,裡面包含了地圖生成時的設定、名稱、玩家數量。

#創造物件類別
setClass("map",
         representation(
           #定義物件的屬性 該屬性可以填入DF 也就是說能把DF作成物件
           name = "character", # 名
           setting = "data.frame", #設定
           playercount = "numeric"
         )
)

#付値一個新物件 我這邊用鳶尾花當範例
testworld1 = new("map", name = "newworld", setting= iris, playercount=163)


#呼叫他的名字 須注意這邊用的運算子是@而不是$
testworld1@name



這樣就做出了一個物件模板,可以填入名字(charater),玩家數量(int),地圖生成時的設定(DF)
minecraft的地圖生成設定本質上是一個向量,直接用向量表示也行。
但是用DF的話就能詳細標註每個項目代表的意義,比較看的董]
而且也能用像是testworld1 @setting$mobgriefing 這樣的運算直接取出看mobgriefing的值
如果用向量就得用testworld1 @setting[某個數字] 還得知道mobgriefing在向量的哪一格。

這樣一來就能生成一個模板用來儲存特定結構的資料了


例如可以生成基因模板,儲存個體的基因
然後再定義一個交配函數,
讓兩個個體交配後生出新個體的基因是父母的組合

噹啷,這樣就是把物件導向設計應用到生物資訊學上了


#R

創作回應

更多創作