69 votes

Quand est-il rentable d'utiliser des méthodes S4 dans la programmation R?

Je programme régulièrement dans la R dans un contexte professionnel, et j'écris des forfaits pour les clients ou les collègues. Certains programmeurs ont, ici, un Java de fond et d'insister sur le fait de faire tout ce que la méthode orientée objet, à l'aide de S4 méthodes. Mon expérience de l'autre main, c'est qu'S4 implémentations souvent d'effectuer des aggraver et provoquer beaucoup plus de maux de tête en essayant d'obtenir le code d'en faire ce que vous voulez qu'il fasse.

Je suis certainement d'accord que dans certains cas, vous devez être en mesure de construire des objets complexes ou ajouter des objets existants d'une manière contrôlée. Mais la plupart du temps, S4 implémentations peuvent facilement être fait en utilisant classique des listes, sans tous les tracas, comme la définition d'standardGeneric, les méthodes, les constructeurs, les initialiseurs et l'aime.

Quand vous considérez l'écriture S4 implémentations pour la R?

EDIT : Pour plus de clarté, j'apprécie les réponses et la discussion sur OO en général dans R. de la programmation orientée objet peut être réalisée de plusieurs façons dans R, mais ma question est vraiment destiné à la valeur ajoutée de l'utilisation de la S4 de méthodes spécifiquement.

26voto

Joshua Ulrich Points 68776

Mon expérience est en ligne avec le vôtre, donc j'utilise S3 exclusivement.

Pour clarifier: S4 a certains de la nappe de fonctionnalités (par exemple, envoi sur plusieurs arguments et le type de connecteur de vérification), mais je n'ai pas rencontré une situation où les caractéristiques de l'emportaient sur les coûts. Des exemples de ces coûts comprennent: tout changement de case nécessite une copie d'objet et (éventuellement le pire) les changements en cours à S4 Méthodes.

En bref, j'aime l'idée derrière S4 mais je voudrais attendre pour arriver à maturité avant de l'utiliser dans mon propre code.

25voto

geoffjentry Points 2151

Je suis en supposant que ce ne s'appliquent pas directement à vous, mais si vous êtes développer des packages pour Bioconductor il y a une incitation à l'utilisation du S4 active de l'encourager à utiliser et ont, pour la meilleure partie d'une décennie maintenant - de sorte que tous les paquets de base de faire un usage intensif de la S4.

Je trouve tous les frais généraux supplémentaires pour être une douleur - la setGeneric, setMethod, traitant de l'espace de NOMS, etc. Cela étant dit, je trouve que la structure qu'il impose, le potentiel pour l'extensibilité et d'autres de telles choses peuvent être en vaut la peine. Comme pour tout, il y a des concessions à faire. Je pense qu'il peut être beaucoup plus propre - je n'aime pas la façon dont S3 méthodes sont tout simplement dissimulés par la convention de nommage (foo.class). Tout cela étant dit, j'ai tendance à éviter d'utiliser S4 lourdement dans mon propre code, à moins que je me dit de le faire.

9voto

Jeff Points 1047

Bonne question! et j'espère que cela génère des discussions réfléchies ...

Je ne l'ai jamais utilisé et je n'ai pas l'intention de le faire pour les raisons suivantes:

  1. Performance
  2. Je n'ai pas la patience de comprendre complètement S4 et sa relation avec S3.
  3. Suggar syntaxique: Je préférerais avoir object.method () plutôt que method (object).

J'aime Suguar, que puis-je dire!

8voto

mdsumner Points 13001

J'ai appris S4 afin de prolonger la répartition Spatiale (sp) des classes pour les animaux de la piste de données. C'était le meilleur choix (plus constants, généraux et correspondant de près à de nombreux SIG définitions) à partir des options disponibles pour éviter d'écrire tout ce qui est nécessaire à partir de zéro. Je ne trouve pas de S4 à titre onéreux comme beaucoup de gens le disent, mais je suis maintenant habitué à explorer la structure sous-jacente des objets de ce genre. La performance est trop bonne, je pense que ça peut être bien fait, mais lorsqu'il fait mal il y a de la performance des pièges.

Si les données spatiales sont d'intérêt pour vous, spatstat est un bon exemple de la façon de faire beaucoup de choses semblables à la sp en S3, même si (comme apparemment tout spatiales . . .) il n'y a presque jamais de nettoyer les analogies entre les structures de données dans différents logiciels.

5voto

Roman Luštrik Points 19295

S4 classes jouent un rôle important dans la statistique spatiale (sensu paquet sp), où la conversion d'un type de données à l'autre semble sans faille. L'écueil de ce est de débogage, qui a été, dans mon expérience, fastidieux, au mieux. Jusqu'à présent, j'ai réussi avec S3 mais peut envisager d'utiliser S4 dans l'avenir.

Avec le temps, les choses se jouait autour d'un lot, je crois qu'ils vont jouer un rôle important dans au moins une des fonctions de base de divers domaines de la R (peut-être que l'analyse spatiale, de l'économétrie, environmetrics...)

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