我想在 R 中创建一个类,我应该使用 S3 还是 S4 类?
我读了很多关于他们的不同的东西,有没有一个比另一个更好?
S3 只能调度它的第一个参数,而 S4 可以调度多个参数。如果您希望能够为函数编写方法,如果给定一个类对象或给定类and对象,或者给定类 and 对象,则该函数foo
应该做不同的事情,那么 S4 提供了一种更好的方法来处理这种复杂性。"bar"
"bar"
"foobar"
"barfoo"
"foobar"
S3 非常简单且易于实现,但并不是真正的正式的面向对象系统。这种简单性是以强制属于一个类的对象具有正确的组件/插槽等为代价的。使用 S3,我可以做类似的事情class(obj) <- "lm"
,方法调度将"lm"
在传递时使用该类的方法obj
,但不能保证obj
确实是一个类的对象"lm"
。
S3 易于实现、文档化,并且需要较少的程序员额外知识。
使用哪个只能是您可以决定的。例如,Doug Bates (2003) 曾说过,对于新项目,他将使用 S4 而不是 S3。除了 S3 方法,我还不需要使用任何其他方法。
所以我会坐下来思考你想要对这些类进行操作的类和方法。想想你想要的功能,这可能会指向一个系统或另一个。
道格拉斯·贝茨。将包转换为 S4。R 新闻,3(1):6-8,2003 年 6 月