我在寫S3方法,我想與任何 R對象一起使用,包括S4對象。你如何獲得S3方法使用S4對象?
我不明白的第一件事是S4類似乎不是從S4基類派生的,所以給出f <- function(x) UseMethod("f")
我不能只聲明f.S4
調度方法並讓它拾取所有S4對象。 (雖然如果unclass
是S4對象,但看起來好像是S4
類。)我應該如何管理調度?
看來,處理這些S4對象的最簡單方法是將它們轉換爲列表。不幸的是,as.list
會拋出一個錯誤(「沒有任何方法強迫這個S4類到一個向量」)。
這是我的測試S4對象:
library(gWidgetstcltk)
win <- gwindow()
功能S3Part
和S3Class
在methods
包看起來前途無量,但他們都拋出錯誤,當我使用它們win
。所以,問題2是:是否有將S4對象轉換爲列表的一般方法?
謝謝。調度現在更有意義。看起來我偶然發現了一個棘手的測試案例;將不得不嘗試其他幾個人並進一步調查。 – 2011-05-06 16:20:27
gwindow對象確實是一個不好的例子。我相信我爲gWidgets對象定義的長度方法會擾亂str。 gwindow對象有兩個插槽,一個用於存放一個工具包(gWidgetsXXX包用於方法調度),另一個用於gWidgetsXXX包中的對象。然而,喬里斯正在展示要做什麼。有一個gWindow的超類,可以用來抓別人。 – jverzani 2011-05-06 16:33:13
@John:謝謝你的澄清。我會集中精力解決更簡單的案例。 – 2011-05-08 19:48:40