class - r s3




R中的類:S3 vs S4 (2)

我想在R中創建一個類,我應該使用S3還是S4類?

我讀了很多關於它們的不同的東西,有一個優於另一個嗎?


參考類怎麼樣? 它不是S3,有些人認為它在S4之上是語法糖,但它含有大量的糖。

舉一個簡短的例子,檢查幾個月前我問過的問題的答案

我仍然需要找出如何為這些類編寫Rd文件。


S3只能調度它的第一個參數,而S4可以調度多個參數。 如果你想能夠為函數foo編寫方法,如果給出類"bar"或給出類"bar" "foobar"對象,或者給出類"barfoo""foobar" "bar"的對象,它們應該做不同的事情"foobar"那麼S4提供了一種更好的方法來處理這種複雜性。

S3非常簡單易於實現,但實際上並不是一個正式的面向對象系統。 這種簡單性是以強制屬於類的對象具有正確的組件/插槽等為代價的。使用S3,我可以執行class(obj) <- "lm" ,方法調度將使用"lm"類的方法當傳遞obj ,但不能保證obj確實是類"lm"的對象。

S3易於實現,文檔化,並且程序員需要更少的額外知識。

使用哪種只能是你可以決定的。 例如,Doug Bates(2003)曾表示,對於新項目,他會使用S4而不是S3。 我還沒有必要使用除S3方法之外的任何東西。

所以我會坐下來思考你想要對這些類進行操作的各種類和方法。 考慮一下您想要的功能,這可能會指向一個系統或另一個系統。

道格拉斯貝茨。 將包轉換為S4 。 R News,3(1):6-8,2003年6月





s4