我想寫一個S4對象,以便它可以傳遞給只有一個S3對象的方法。 (看起來像setOldClass()
可能與此有關,但從documentation我不清楚?)使S4對象充當S3類嗎?
例如,一個小例子,想象我有S3類和函數:
myS3 <- list(a = 1, b = 2)
class(myS3) <- "myS3class"
myS3function.myS3class <- function(x) x$a + x$b
和我有S4對象
setClass("myS4class", representation(a = "numeric", b = "numeric"))
obj <- new("myS4class", a = 1, b = 2)
有什麼我可以做這樣
myS3function.myS3class(obj)
給我同樣的事情,
myS3function.myS3class(myS3)
由只修改S4類?
編輯我這種方法的基本原理是利用S3類的所有現有方法(通常可能來自其他包等),而不必重寫它們。我意識到一種方法是簡單地寫一個強制方法(setAs()
),它可以將我的S4對象變成S3對象,但是用戶總是需要手動執行這個步驟。 (雖然它有效,但我還不清楚是否使用setAs()
將S4課程升級到S3課程,而不是S4課程之間的映射課程)。
從我閱讀setOldClass
的文檔的方式來看,這聽起來像這樣可以使S3對象像S4對象一樣工作?那是對的嗎?如果是這樣,我的問題是,如果有可能做到相反(也許通過設置S4班的prototype
?)。
如果這是不可能的,那麼解釋爲什麼這將是一個壞主意?
感謝您的回答,但正如我上面所述,我真的在尋找一種解決方案,可以在不明確地調用轉換到S3的情況下工作。 (例如,看起來我們可以做相反的事情 - 有一個S4方法可以在沒有明確強制的情況下對S3對象進行操作)如果這是不可能的,我想明白爲什麼不更好一點.... – cboettig