Premier code de paquetage R à étudier en vue de la rédaction de son propre paquetage

47

Je prévois de commencer à écrire des packages R.

J'ai pensé qu'il serait bon d'étudier le code source des paquets existants pour apprendre les conventions de la construction de paquets.

Mes critères pour les bons forfaits à étudier:

  • Idées statistiques / techniques simples : il s’agit d’apprendre les mécanismes de la construction de paquets. Comprendre le paquet ne devrait pas nécessiter une connaissance détaillée d'un domaine spécifique sur le sujet du paquet.
  • Style de codage simple et conventionnel : je recherche quelque chose de plus que, Hello Worldmais pas beaucoup plus. Des astuces et des bidouilles idiosyncratiques seraient gênantes lors du premier apprentissage des packages R.
  • Bon style de codage : Le code est bien écrit. Il révèle à la fois une compréhension du bon codage en général et une connaissance des conventions de codage de R.

Des questions:

  • Quels forfaits seraient intéressants à étudier?
  • Pourquoi le code source du paquet suggéré serait-il bon à étudier par rapport aux critères mentionnés ci-dessus ou à tout autre critère pouvant être pertinent?

Mise à jour (13/12/2010) Pour faire suite aux commentaires de Dirk, je voulais préciser que de nombreux paquetages seraient intéressants à étudier en premier. Je conviens également que les packages fourniront des modèles pour différentes choses (par exemple, vignettes, classes S3, classes S4, tests unitaires, Roxygen, etc.). Néanmoins, il serait intéressant de lire des suggestions concrètes sur les bons packages pour commencer et sur les raisons pour lesquelles ils seraient bons pour commencer.

J'ai également mis à jour la question ci-dessus pour faire référence à "packages" plutôt que "package".

Jeromy Anglim
la source
2
Une autre façon de voir cela est de rechercher des auteurs de paquetages particuliers ; certains auteurs sont très doués pour suivre les meilleures pratiques et écrire du code clair, auquel cas vous pouvez étudier l’ensemble de leur matériel.
Shane
1
@Shane Bon point. Des suggestions sur les auteurs de paquetages qu'il serait bon d'étudier lors du premier apprentissage de la rédaction de paquets?
Jeromy Anglim

Réponses:

15

Je suggérerais de regarder le paquet zoo pour les raisons suivantes:

  1. Il a plusieurs vignettes bien écrites;
  2. Il utilise un espace de noms à l' aide useDynLib, import, exportet S3method;
  3. Il a plusieurs tests unitaires utilisant RUnit;
  4. Il fournit de bons exemples sur la manière de créer / documenter des méthodes S3.
  5. Il a des appels au code C via l' .Callinterface;
  6. Il contient une démo (tracé);
  7. Il vise à être cohérent avec l’installation principale de R (par exemple, les fonctions se comportent de la même façon, elles ne masquent pas / ne remplacent pas les fonctions de base, etc.)

Il n’utilise pas de roxygen, ce qui est très pratique, mais 7 sur 8 n’est pas mauvais. ;-)

Pour répondre à vos critères:

  1. Le concept est simple: zooest une classe matricielle ordonnée par quelque chose . Aucune connaissance spécifique au domaine nécessaire.
  2. zoo semble avoir quelques conventions de codage idiosyncratiques, mais rien d’excessif n’empêche de comprendre le code.
  3. zoo vise à être aussi compatible avec R que possible.
Joshua Ulrich
la source
1
Où peut-on trouver ce forfait?
Adam SA
@Adam: J'ai ajouté un lien vers zoo dans ma réponse. Cette page contient également un lien vers la page du projet Roofor du zoo.
Joshua Ulrich
9

Je ne me considère pas comme un développeur de progiciels R établi, mais j'ai récemment suivi le processus d'écriture et de maintenance d'un progiciel pour mon environnement de travail.

J'avais précédemment écrit / maintenu / mis à jour un ensemble de scripts que je transmettrais d'un projet à l'autre via la source()fonction. Le résultat final a été que je me retrouvais avec des scripts principalement redondants qui traînaient à divers endroits sur nos lecteurs réseau. Il n’a jamais été clair où se trouvaient les ensembles de scripts les plus récents. Depuis, j'ai migré vers l'écriture / maintenance d'un paquet utilisant roxygen. Cela a considérablement simplifié ma vie et facilité le partage de mon travail avec des collègues.

Sur la base de vos critères ci-dessus, j'approuve la recommandation de revoir les paquets écrits par Hadley. En particulier, je pense que la lecture du wiki de devtools serait très utile. Le code de Hadley est bien documenté et plusieurs de ses paquets utilisent roxygen. Je pense que l'écriture et la maintenance d'un document pour les fonctions R et la documentation R sont beaucoup plus faciles que de les séparer en deux emplacements (fichiers .R et .RD).

Les paquets de Hadley servent également des concepts assez basiques et sont relativement faciles à supprimer (à mon humble avis) si vous recherchez des indications sur les idées de l'aspect technique. Je me retrouve à fouiller dans le code source de plyr lorsque je cherche un pointeur sur la documentation roxygen ou d'autres tâches fondamentales.

Chasse
la source
Merci. Le wiki devtools, en particulier, a beaucoup d'excellentes idées.
Jeromy Anglim
@Jeromy - Après avoir lu vos récents articles sur la recherche reproductible, etc. J'aurais également dû mentionner qu'Eclipse prenait en charge la syntaxe roxygen et en facilitait la transition. La tâche la plus difficile que j'ai surmontée consiste à rédiger des vignettes utiles et productives. J'imagine que vous partez d'un point de départ beaucoup plus élevé que moi à cet égard.
Chase
2
Il suffit de ne pas lire le source ggplot2. Cela fera saigner votre cerveau
Hadley
quel développeur R honnête!
Leo5188
7

Pourquoi ne pas adopter une méthode d'échantillonnage aléatoire à caractère empirique? Choisissez-en quelques-uns et voyez quel travail vous convient.

Blague à part, il suffit de regarder quelques paquets que vous utilisez vous-même et que vous connaissez bien. Leur téléchargement est facile, ou si vous préférez, vous pouvez également les visualiser via une interface Web de R-Forge, RForge ou Github.

Vous allez probablement vous retrouver avec différents packages pour différentes idées. Certains peuvent vous aider à intégrer une vignette, par exemple. Certains peuvent aider avec le code compilé. Ou des tests unitaires. Ou Roxygen. Il y en a environ 2600, alors pourquoi être obsédé par un seul?

Dirk Eddelbuettel
la source
Grands points. Je prévoyais d'explorer moi-même. Et bien sûr, l'exploration représente la moitié du plaisir. Et je conviens que différents forfaits enseignent différentes choses. Je conviens que de nombreux forfaits constitueraient de bons points de départ. Je mettrai à jour ma question pour refléter l'idée que plusieurs packages satisferaient aux critères. Mais avoir des suggestions concrètes pourrait faire gagner un peu de temps à moi-même et à d’autres nouveaux utilisateurs de R packages. Je pense également que les développeurs établis de packages R sont mieux placés pour commenter les avantages d'un package donné à des fins d'apprentissage.
Jeromy Anglim
2
Parce que vous devez commencer quelque part :)
hans0l0
2

Un autre conseil peut être de regarder les paquets que votre livre dépendra ou interagira avec, surtout si ceux-ci implémentent certains éléments mentionnés par Joshua Ulrich ou ont été écrits par des auteurs renommés. Il peut être utile de savoir comment les choses se passent dans votre domaine, afin d’assurer une certaine compatibilité. Souvent, les gens auront réfléchi à certains problèmes et la lecture de leur solution pourrait être utile.

Laurent
la source
1

Je recommanderais le paquet de remodelage de Hadley. vous pouvez trouver la source sur https://github.com/hadley/reshape

Ramnath
la source
2
Merci. Pourquoi le recommandes-tu?
Jeromy Anglim
4
Je ne recommanderais pas de refaçonner - même si je ne comprends pas comment cela fonctionne. Reshape2 est bien meilleur et suit beaucoup plus de bons principes de développement.
Hadley