Class R类:S3与S4

Class R类:S3与S4,class,r,s4,Class,R,S4,我想在R中创建一个类,我应该使用S3还是S4类 我读了很多关于它们的不同的东西,有一个优于另一个吗?S3只能在它的第一个参数上分派,而S4可以在多个参数上分派。如果您希望能够为函数foo编写方法,如果给定类对象“bar”或给定类对象“bar”和“foobar”,或给定类对象“barfoo”和“foobar”,则应该执行不同的操作,然后S4提供了一种更好的方法来处理这种复杂性 S3非常简单,易于实现,但实际上并不是一个正式的面向对象系统。这种简单性是以强制属于一个类的对象具有正确的组件/插槽等为代

我想在R中创建一个类,我应该使用S3还是S4类


我读了很多关于它们的不同的东西,有一个优于另一个吗?

S3只能在它的第一个参数上分派,而S4可以在多个参数上分派。如果您希望能够为函数
foo
编写方法,如果给定类对象
“bar”
或给定类对象
“bar”
“foobar”
,或给定类对象
“barfoo”
“foobar”
,则应该执行不同的操作,然后S4提供了一种更好的方法来处理这种复杂性

S3非常简单,易于实现,但实际上并不是一个正式的面向对象系统。这种简单性是以强制属于一个类的对象具有正确的组件/插槽等为代价的。使用S3,我可以做类似
class(obj)的事情,那又如何呢?不是S3,有些人认为它是S4上面的糖,但糖很多。
举个简单的例子,看看几个月前我在这里问的一个问题


我仍然需要找出如何为这些类编写Rd文件。

它们是两个不同的概念。你想做什么?我想操纵对象:创建它们,提取属性或槽,并最终为它们定义方法我不得不说我更喜欢objectName@attributeName对于S4,而不是s3的attr(objectName,attributeName),就像我说的,S4是一个完全不同的野兽,并且认为它会使编程更容易,比做我的客人好。:)有关S4对象资源的讨论,请参阅。@RockScience:您不应该使用objectName@attributeName,您应该有一个getter方法。始终尝试编写接口代码,而不是实现。@RockScience:如果您想要引用类,您可以在这里阅读更多关于它们潜在用途的信息。感谢您几个月前提出的问题的链接:-)它们在计算上是否具有可比性?S4快了吗?我认为S3可以快得多——通过将时间关键型代码移植到S3,我已经实现了50倍的速度提升。两个主要原因:a)在S3中创建新类成员的开销很小(只需更改“class”属性),b)如果需要,您可以选择通过编写例如mean.Date(x)而不是mean(x)来避免方法调度开销。但我很想听听是否有人对加速S4代码有任何建议。