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在向量的哪一格。
這樣一來就能生成一個模板用來儲存特定結構的資料了
例如可以生成基因模板,儲存個體的基因
然後再定義一個交配函數,
讓兩個個體交配後生出新個體的基因是父母的組合
噹啷,這樣就是把物件導向設計應用到生物資訊學上了