54 votes

classe dans R: S3 vs S4

Je veux créer une classe en R, dois-je utiliser la classe S3 ou S4?

J'ai lu beaucoup de choses différentes à leur sujet, y a-t-il un supérieur à l'autre?

61voto

Gavin Simpson Points 72349

S3 ne peut l'expédition sur ce premier argument, alors que la S4 peut dispatcher sur plusieurs arguments. Si vous voulez être en mesure de rédiger des méthodes pour la fonction foo qui devrait faire des choses différentes, si, étant donné un objet de la classe "bar" ou donné des objets de la classe "bar" et "foobar", ou donné des objets de la classe "barfoo" et "foobar", puis S4 offre une bien meilleure façon de gérer cette complexité.

S3 est très simple et facile à mettre en œuvre, mais n'est pas vraiment un objet formel, le système d'orientation. Que la simplicité est au prix de l'application que les objets appartenant à une classe ont les composants corrects/fentes etc. Avec le S3, je peux faire des choses comme class(obj) <- "lm" et la méthode de répartition d'employer des méthodes pour l' "lm" classe lorsqu'il est passé d' obj, mais il n'y a aucune garantie que l' obj est vraiment un objet de la classe "lm".

S3 est facile à mettre en œuvre, document et nécessite moins de connaissances supplémentaires de la part du programmeur.

Pour l'utiliser ne peut être quelque chose que vous pouvez décider. Doug Bates (2003) l'a dit, par exemple, que pour les nouveaux projets qu'il utiliserait S4 sur S3. Je n'ai pas encore eu besoin d'utiliser autre chose que S3 méthodes.

Je voudrais donc vous asseoir et de réfléchir sur les types de classes et de méthodes que vous souhaitez utiliser sur ces classes. Pense à propos de la fonctionnalité que vous voulez, et qui sera probablement le point vers un système ou l'autre.

Douglas Bates. La conversion des paquets à S4. R Nouvelles, 3(1):6-8, Juin 2003

7voto

mariotomo Points 2076

Quid des Classes de Référence? ce n'est pas S3 et certains considèrent que c'est syntaxiques de sucre sur le dessus de la S4, mais c'est beaucoup de sucre.

Pour un petit exemple, vérifier ce qui répond à une question que j'ai posée ici il y a quelques mois.

Je dois encore trouver comment écrire Rd fichiers de telles classes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X