2010-06-19 14 views
8

Ich kann nicht etwas finden, das die Wirkung eines Rückgängig-Befehls in R hat (weder in Eine Einführung in R noch in R in Kürze). Ich interessiere mich besonders für das Rückgängigmachen/Löschen im Umgang mit interaktiven Graphen.Rückgängig-Befehl in R

Welche Ansätze schlagen Sie vor?

Antwort

24

sollten Sie einen anderen Ansatz berücksichtigen, die zu reproduzierbar Arbeit führt:

  • einen Editor Wählen Sie mögen und die hat R Unterstützung
  • Code schreiben in ‚Schnipsel‘, dh kurze Dateien für Funktionen und dann verwenden Sie die Funktionen des Editors/R Integration, um den Code an den R Interpreter senden
  • Wenn Sie einen Fehler machen, bearbeiten Sie Ihr Snippet erneut und führen Sie es erneut
  • Sie werden immer ein Protokoll von dem, was Sie getan haben

All dies funktioniert enorm gut in ESS weshalb viele erfahrene R Benutzern gefällt dieses Umfeld ist. Aber Redakteure sind eine subjektive und persönliche Wahl; Andere Leute mögen Eclipse mit StatET besser. Es gibt auch andere Lösungen für Mac OS X und Windows, und all dies wurde schon unzählige Male hier auf SO und an anderen Stellen wie den R-Listen diskutiert.

+1

Ich möchte nur meine zwei Cent dafür anbieten. Mein bevorzugter Editor ist Eclipse + StatEt, aber wie Dirk sagt, ist die Wahl des Editors subjektiv. – PaulHurleyuk

+0

Ich benutze gerne Gedit + RGedit. (Es ist leider nie gelungen, StatET unter Fedora zu installieren). So, jetzt haben wir 4 Cent;) – nico

+1

Wenn Sie ein Windows-Benutzer sind, können Sie Tinn-R immer versuchen. Ich benutze es nicht selbst, habe aber großartige Dinge darüber gehört. Wir haben jetzt 6c. :) –

13

Im Allgemeinen nehme ich Dirks Strategie an. Sie sollten darauf achten, dass Ihr Code vollständig reproduzierbar ist, wie Sie Ihre Rohdaten in Output umgewandelt haben.

Wenn Sie jedoch komplexen Code haben, kann es eine lange Zeit dauern, alles neu zu starten. Ich hatte Code, der über 30 Minuten benötigt, um die Daten zu verarbeiten (d. H. Importieren, transformieren, zusammenführen usw.). In diesen Fällen würde eine einzelne datenzerstörende Codezeile erfordern, dass ich 30 Minuten warten muss, um meinen Arbeitsbereich wiederherzustellen. von Daten zu zerstören Code ich meine Dinge wie:

  • x <- merge(x, y)
  • df$x <- df$x^2

z.B. verschmilzt, eine vorhandene Variable mit einer Umwandlung zu ersetzen, Zeilen oder Spalten zu entfernen, und so weiter. In diesen Fällen ist es einfach, besonders wenn man zuerst lernt, dass R einen Fehler macht.

Um zu vermeiden, diese 30 Minuten warten zu müssen, übernehme ich mehrere Strategien:

  • Wenn ich bin, etwas zu tun, wo ein Risiko gibt es meine aktiven Objekte zu zerstören, ich werde zuerst das Ergebnis in kopieren ein temporäres Objekt. Ich werde dann überprüfen, ob es mit dem temporären Objekt funktioniert hat, und es dann erneut ausführen, indem ich es durch das richtige Objekt ersetze. Z. B. erster Lauf temp <- merge(x, y); prüfen, ob es str(temp); head(temp); tail(temp) gearbeitet und wenn alles x <- merge(x, y)
  • gut aussieht, wie in der psychologischen Forschung üblich ist, habe ich oft großen Datenrahmen mit Hunderten von Variablen und unterschiedlichen Teilmengen von Fällen. Für eine bestimmte Analyse (z. B. eine Tabelle, eine Figur, einen Ergebnistext) entwerfe ich oft nur die Teilmenge von Fällen und Variablen, die ich brauche, in ein separates Objekt für die Analyse und arbeite mit diesem Objekt, wenn ich meine vorbereite und finalisiere Analysecode. Auf diese Weise ist es weniger wahrscheinlich, dass ich versehentlich meinen Hauptdatenrahmen beschädige.Dies setzt voraus, dass die Ergebnisse der Analyse nicht in den Hauptdatenrahmen zurückgeführt werden müssen.
  • Wenn ich eine große Anzahl komplexer Datentransformationen abgeschlossen habe, kann ich eine Kopie der Kernarbeitsbereichsobjekte speichern. ZB save(x, y, z , file = 'backup.Rdata') So, wenn ich einen Fehler mache, muss ich nur diese Objekte neu laden.
  • df$x <- NULL ist eine praktische Möglichkeit, eine Variable in einem Datenrahmen zu entfernen, dass Sie nicht

jedoch am Ende schaffen wollte ich noch den gesamten Code von Grund auf neu laufen zu überprüfen, ob das Ergebnis reproduzierbar ist.

+0

Schöne Antwort. Beachten Sie jedoch, dass vieles davon automatisch mit CacheSweave (oder "Knitr") erledigt wird. –

+2

Einverstanden. Zwei Jahre später benutze ich oft Caching in Knitrollen. –

+0

Ja, ich schätze, ich bekomme den Grabhüterpreis für die Wiederauferstehung eines alten Postens. 'Knitr' hat Caching viel mehr machbar gemacht. Ich konnte CacheSweave nie wirklich mit pgfSweave arbeiten lassen. –