Rei*_*son 60
S3只能调度它的第一个参数,而S4可以调度多个参数.如果你希望能够写一个函数的方法foo
,如果给定类的一个对象,它应该做不同的事情"bar"
或定类的对象"bar"
和 "foobar"
,或定类的对象"barfoo"
和"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月