我想编写一个 S4 对象,以便可以将其传递给仅采用 S3 对象的方法。(似乎setOldClass()
可能与此有关,但从文档中我不清楚?)
例如,举个简单的例子,假设我有 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()
我意识到一种方法是简单地编写一个强制方法((虽然它有效,但我也有点不清楚setAs()
将 S4 类带到 S3 类而不是 S4 类之间的映射是否是不好的做法)。
从我阅读文档的方式来看setOldClass
,听起来这可以使 S3 对象像 S4 对象一样工作?那是对的吗?如果是这样,那么我的问题是是否可以反过来(也许通过prototype
在 S4 类中设置?)。
如果这是不可能的,那么解释一下为什么这是一个坏主意的理由怎么样?