Der erste Quellcode für R-Pakete, der in Vorbereitung auf das Schreiben eines eigenen Pakets studiert werden soll

47

Ich plane, R-Pakete zu schreiben.

Ich dachte, es wäre gut, den Quellcode bestehender Pakete zu studieren, um die Konventionen der Paketkonstruktion zu lernen.

Meine Kriterien für gute Studienangebote:

  • Einfache statistische / technische Ideen : Es geht darum, etwas über die Mechanik des Verpackungsbaus zu lernen. Für das Verständnis des Pakets sollten keine detaillierten, in hohem Maße domänenspezifischen Kenntnisse über das eigentliche Thema des Pakets erforderlich sein.
  • Einfacher und konventioneller Codierungsstil : Ich suche etwas mehr als, Hello Worldaber nicht viel mehr. Idiosynkratische Tricks und Hacks würden ablenken, wenn man zum ersten Mal R-Pakete lernt.
  • Guter Codierungsstil : Der Code ist gut geschrieben. Es zeigt sowohl ein Verständnis für eine gute Codierung im Allgemeinen als auch ein Bewusstsein für die Konventionen der Codierung in R.

Fragen:

  • Welche Pakete wären gut zum Lernen?
  • Warum sollte der vorgeschlagene Quellcode des Pakets in Bezug auf die oben genannten Kriterien oder andere möglicherweise relevante Kriterien gut zu studieren sein?

Update (13/12/2010) Nach den Kommentaren von Dirk wollte ich klarstellen , dass es ohne Zweifel gut ist, viele Pakete zuerst zu studieren. Ich bin auch damit einverstanden, dass Pakete Modelle für verschiedene Dinge bereitstellen (z. B. Vignetten, S3-Klassen, S4-Klassen, Komponententests, Sauerstoff usw.). Dennoch wäre es interessant, zunächst konkrete Vorschläge zu guten Paketen und die Gründe dafür zu lesen.

Ich habe auch die Frage oben aktualisiert, um auf "Pakete" anstatt "Paket" zu verweisen.

Jeromy Anglim
quelle
2
Eine weitere Möglichkeit zu sehen , das ist für bestimmtes Paket suchen Autoren ; Einige Autoren sind sehr gut darin, Best Practices zu befolgen und klaren Code zu schreiben. In diesem Fall können Sie alle ihre Materialien studieren.
Shane
1
@ Shane Guter Punkt. Irgendwelche Vorschläge, welche Paketautoren gut zu studieren sind, wenn sie zum ersten Mal lernen, Pakete zu schreiben?
Jeromy Anglim

Antworten:

15

Ich würde vorschlagen, das Zoo- Paket aus folgenden Gründen anzusehen:

  1. Es hat mehrere gut geschriebene Vignetten;
  2. Es verwendet einen Namespace useDynLib, import, export, und S3method;
  3. Es hat mehrere Unit-Tests mit RUnit;
  4. Es enthält gute Beispiele zum Erstellen / Dokumentieren von S3-Methoden.
  5. Es hat einige Aufrufe von C-Code über die .CallSchnittstelle;
  6. Es enthält eine (Plot-) Demo;
  7. Es soll mit der Core R-Installation konsistent sein (z. B. verhalten sich Funktionen ähnlich, es maskiert / überschreibt keine Basisfunktionen usw.)

Es wird kein Sauerstoff verwendet, was sehr praktisch ist, aber 7 von 8 sind nicht schlecht. ;-)

Um auf Ihre Kriterien zu antworten:

  1. Das Konzept ist einfach: zooIst eine matrixartige Klasse, die nach etwas geordnet ist . Keine domänenspezifischen Kenntnisse erforderlich.
  2. zoo scheint ein paar eigenwillige Kodierungskonventionen zu haben, aber nichts übertriebenes, das das Verständnis des Codes behindert.
  3. zoo zielt darauf ab, mit R so konsistent wie möglich zu sein.
Joshua Ulrich
quelle
1
Wo kann man dieses Paket finden?
Adam SA
@Adam: Ich habe in meiner Antwort einen Link zum Zoo hinzugefügt. Diese Seite enthält auch einen Link zur R-Forge-Projektseite des Zoos.
Joshua Ulrich
9

Ich betrachte mich nicht als etablierter Entwickler von R-Paketen, habe aber kürzlich den Prozess des Schreibens und Wartens eines Pakets für meine Arbeitsumgebung durchlaufen.

Ich habe zuvor eine Reihe von Skripten geschrieben / gepflegt / aktualisiert, die ich über die source()Funktion von Projekt zu Projekt weitergeben würde . Das Endergebnis davon war, dass ich am Ende meist redundante Skripte an verschiedenen Stellen auf unseren Netzlaufwerken hatte. Es war nie klar, wo sich die aktuellsten Skripts befanden. Ich bin seitdem dazu übergegangen, ein Paket mit roxygen zu schreiben / zu pflegen. Es hat mein Leben drastisch vereinfacht und es einfacher gemacht, meine Arbeit mit Kollegen zu teilen.

Anhand der oben genannten Kriterien empfehle ich, die von Hadley verfassten Pakete zu überprüfen. Insbesondere halte ich das Durchlesen des devtools-Wikis für sehr hilfreich. Hadleys Code ist gut dokumentiert und einige seiner Pakete verwenden roxygen. Ich denke, dass es viel einfacher ist, ein Dokument für beide R-Funktionen und die R-Dokumentation zu schreiben und zu verwalten, als sie auf zwei Speicherorte aufzuteilen (.R- und .RD-Dateien).

Hadleys Pakete dienen auch einigen ziemlich grundlegenden Konzepten und sind relativ einfach zu deparsen (imho), wenn Sie nach Hinweisen auf die technischen Aspektideen suchen. Ich finde mich dabei, den Plyr- Quellcode zu durchsuchen , wenn ich nach einem Hinweis auf die Sauerstoffdokumentation oder andere grundlegende Aufgaben suche.

Verfolgungsjagd
quelle
Vielen Dank. Insbesondere das devtools-Wiki hat viele großartige Ideen.
Jeromy Anglim
@Jeromy - Wenn du deine letzten Beiträge zu reproduzierbaren Recherchen usw. gelesen hast (uber uber hilfreich, danke!), Wirst du dich sehr schnell mit roxygen befassen. Ich hätte auch erwähnen sollen, dass Eclipse die roxygen-Syntax unterstützt und den Übergang ziemlich einfach gemacht hat. Die schwierigste Aufgabe, die ich bewältigt habe, ist das Schreiben von Vignetten, die nützlich und produktiv sind. Ich stelle mir vor, Sie starten an einem viel höheren Startpunkt als ich.
Chase
2
Lies einfach nicht die ggplot2-Quelle. Es wird Ihr Gehirn bluten lassen
Hadley
Was für ein ehrlicher R-Entwickler!
Leo5188
7

Warum nicht einen empirisch gesteuerten Zufallsstichprobenansatz wählen? Wählen Sie einfach einige aus und sehen Sie, welche für Sie arbeiten.

Scherz beiseite, schauen Sie sich nur ein paar Pakete an, die Sie selbst verwenden und mit denen Sie vertraut sind. Das Herunterladen ist ganz einfach. Wenn Sie es vorziehen, können Sie sie auch über ein Webinterface bei R-Forge, RForge oder Github anzeigen.

Sie werden höchstwahrscheinlich unterschiedliche Pakete für unterschiedliche Ideen erhalten. Einige können Ihnen helfen, wie sie beispielsweise eine Vignette integrieren. Einige können mit kompiliertem Code helfen. Oder Unit-Tests. Oder Sauerstoff. Es gibt ungefähr 2600 von ihnen, warum also besessen von einem einzigen Besten?

Dirk Eddelbüttel
quelle
Tolle Punkte. Ich hatte vor, mich selbst zu erkunden. Und natürlich macht das Erkunden den halben Spaß. Und ich bin damit einverstanden, dass verschiedene Pakete verschiedene Dinge lehren. Ich bin damit einverstanden, dass viele Pakete gute Ausgangspunkte wären. Ich werde meine Frage aktualisieren, um die Idee widerzuspiegeln, dass mehrere Pakete die Kriterien erfüllen würden. Mit einigen konkreten Vorschlägen können ich und andere, die mit R-Paketen noch nicht vertraut sind, jedoch Zeit sparen. Ich denke auch, dass etablierte Entwickler von R-Paketen besser in der Lage sind, zu Lernzwecken Kommentare zu den Vorzügen eines bestimmten Pakets abzugeben.
Jeromy Anglim
2
weil du irgendwo anfangen musst :)
hans0l0
2

Ein weiterer Ratschlag könnte sein, sich Pakete anzusehen, von denen Sie abhängig sind oder mit denen Sie interagieren, insbesondere, wenn diese einige von Joshua Ulrich erwähnte oder von renommierten Autoren geschriebene Elemente implementieren . Es kann hilfreich sein zu lernen, wie die Dinge auf Ihrem Gebiet gemacht werden, um eine gewisse Kompatibilität sicherzustellen. Oft haben die Leute über bestimmte Probleme nachgedacht, und es ist hilfreich, ihre Lösungsvorschläge zu lesen.

Laurent
quelle
1

Ich würde Hadleys Umgestaltungspaket empfehlen. Sie finden die Quelle unter https://github.com/hadley/reshape

Ramnath
quelle
2
Vielen Dank. Warum empfehlen Sie es?
Jeromy Anglim
4
Ich würde Umformen nicht empfehlen - auch wenn ich nicht verstehe, wie es funktioniert. Reshape2 ist viel besser und folgt viel mehr guten Entwicklungsprinzipien.
Hadley