Was sind einige gute Referenzen / Ratschläge zum Erlernen von Emacs Speaks Statistics (mit R)?

9

Ich benutze R seit mehreren Jahren, aber ich habe immer eine GUI wie Tinn-R, JGR und zuletzt R-Studio verwendet.

Obwohl mir die Benutzeroberfläche von R-Studio gefällt, habe ich das Gefühl, dass ich bei längeren Programmen mit wenigen / keinen Grafiken effizienter codieren kann, indem ich die Verknüpfungen eines grundlegenderen Texteditors wie Emacs nutze.

Ich habe Emacs und das ESS-Plugin installiert, alles funktioniert ordnungsgemäß und ich habe Code getestet, aber es fällt mir schwer, mich daran zu gewöhnen, und ich habe kein geeignetes Referenzhandbuch gefunden.

Bei Google-Suchanfragen werden einige sehr veraltete Websites mit Tutorials zurückgegeben, die sich hauptsächlich auf die Installation und Konfiguration der Plugins konzentrieren. Das Handbuch auf der offiziellen Website ist mir etwas zu dicht.

Ich suche eine relativ kurze Einführung (idealerweise mit Screenshot und einer Liste von Hotkeys) für jemanden, der mit R vertraut ist, aber nicht mit Emacs.

Alle Referenzen oder andere Tipps für den Einstieg wären sehr dankbar.

Wille
quelle

Antworten:

11

Zuerst müssen Sie den grundlegenden Text lernen, der mit Emacs arbeitet. Da emacs sehr anspruchsvoll ist, kann es eine Herausforderung sein, herauszufinden, wie man einfach Text auswählt und kopiert. Investieren Sie also etwas Zeit, um herauszufinden, wie Sie dies effizient tun können. Das Lesen des Handbuchs könnte helfen. Für Mac OS X, das Aquamacs verwendet, werden native Verknüpfungen unterstützt.

Die Arbeit mit ESS unterscheidet sich nicht von der Arbeit mit R. Es sollten dieselben Regeln für die Organisation von Code gelten. In meinem Fall hat jedes Projekt ein eigenes Verzeichnis, das sich im übergeordneten Verzeichnis R befindet, das sich in meinem Ausgangsverzeichnis befindet (unter Windows empfehle ich, das Ausgangsverzeichnis von emacs auf das Verzeichnis zu verweisen, in dem sich alle Ihre Quellen befinden). Wenn ich ESS für die Arbeit am Projekt verwende, mache ich immer M-x Rdas Startverzeichnis meines Projektverzeichnisses.

Nach dem Start des R-Prozesses teile ich Emacs normalerweise in zwei Fenster (Emacs-Terminologie). Dann habe ich links einen Quellcode, den ich rechts an den R-Prozess sende. Die relevanten Verknüpfungen (dies sind Emacs-Verknüpfungen) dienen C-x 3zum vertikalen Teilen von Fenstern, C-x 1zum Festlegen des aktuellen Puffers zum einzigen Fenster und C-x 2zum horizontalen Teilen von Fenstern.

Beim Senden von Code an R unterscheide ich zwischen Funktionen und R-Anweisungen. Dazu mache ich alle meine Funktionen in einer Datei, die normalerweise aufgerufen wird 10code.R. Dann kann ich diese Datei einfach mit der Option zum Laden der ESS-Datei (Verknüpfung C-c C-l) laden . Der Vorteil dieses Ansatzes besteht darin, dass er alle Funktionen bezieht und nichts im R-Puffer erzeugt. Wenn Ihr Code einen Fehler enthält, zeigt ESS eine Meldung im Minibuffer an, und Sie können sie durch Drücken von C-c`untersuchen.

Der andere Code sind die R-Anweisungen, die ich selbsterklärend zu halten versuche: Daten laden, Daten bereinigen, statistisches Modell anpassen, Ergebnisse überprüfen, Endergebnisse erstellen. Der Quellcode für diese Anweisungen ist der aktuelle Status des Projekts. Die Absicht ist, dass nach Abschluss des Projekts durch Beschaffung der Dateien mit diesem Code das Projekt reproduziert wird (ich verwende git auch zum Verfolgen des Verlaufs). Wenn ich mit dieser Datei arbeite, arbeite ich normalerweise nur mit einer R-Anweisung, die ich über die Eval-Funktion, den Absatz und den Anweisungsbefehl, der die Verknüpfung ist, an den R-Prozess sende C-c C-c. Dieser Befehl sendet an R die Verarbeitung des Absatzes, dh des durch neue Zeilen begrenzten Textes. Dies ist praktisch, da Sie R-Anweisungen in Aufgaben gruppieren und die gesamte Aufgabe an den R-Prozess senden können. Es ist auch nicht erforderlich, Text auszuwählen, was ebenfalls sehr praktisch ist. Die AbkürzungC-c C-c hat den Vorteil, dass der Cursor auf das R-Fenster bewegt wird, sodass Sie die Ergebnisse der gesendeten R-Anweisung sofort überprüfen können.

Mein grundlegender Workflow bewegt sich also viel zwischen Fenstern und Puffern. Um dies zu erleichtern, verwende ich die folgenden Verknüpfungen in meiner .emacs-Datei:

(define-key global-map [f1] 'Control-X-prefix)
(define-key global-map [f3] 'find-file)
(define-key global-map [f2] 'save-buffer)
(define-key global-map [f8] 'kill-buffer)
(define-key global-map [f5] 'switch-to-buffer)
(define-key global-map [f6] 'other-window)
(define-key global-map [f9] 'ess-load-file)

Ich benutze selten f1, aber alle anderen sehr häufig. Andere spezifische ESS-Einstellungen, die ich verwende, sind die folgenden:

(setq comint-input-ring-size 1000)
(setq ess-indent-level 4)
(setq ess-arg-function-offset 4)
(setq ess-else-offset 4)

Dies weist ESS an, die Registerkarte 4 Zeichen breit zu machen (der Standardwert ist 2), was meine persönliche Präferenz ist, und erweitert die Anzahl Ihrer ausgegebenen Befehle, die ESS als Verlauf speichert.

Für die direkte Arbeit mit dem R-Prozess fand ich die folgenden Verknüpfungen sehr nützlich:

(add-hook 'inferior-ess-mode-hook 
      '(lambda nil 
         (define-key inferior-ess-mode-map [\C-up] 'comint-previous-matching-input-from-input)
             (define-key inferior-ess-mode-map [\C-down] 'comint-next-matching-input-from-input)
        (define-key inferior-ess-mode-map [\C-x \t] 'comint-dynamic-complete-filename)
        )
)

Dies erinnert an die R-Anweisung aus Ihrem R-Anweisungsverlauf, versucht jedoch, sie mit der bereits in Ihrer Zeile befindlichen Anweisung abzugleichen. Wenn Sie beispielsweise den plR-Prozess eingeben und drücken \C-up(das ist die Steuerung und der Aufwärtspfeil), werden alle Anweisungen durchlaufen, die mit beginnen pl, und beispielsweise alle plot(...Befehle abgerufen.

Die letzte Einstellung, die ich mit ESS verwende, ist die folgende:

(setq ess-ask-about-transfile t)

Auf diese Weise fragt ESS immer, wo der Text mit dem R-Prozess im Puffer gespeichert werden soll. Normalerweise nummeriere ich diese Dateien nach Datum, sodass ich immer eine andere Möglichkeit habe, zu verfolgen, was genau ich getan habe. Die einzige Einschränkung dieser Option besteht darin, dass ESS aus irgendeinem Grund den R-Puffer nach dem Laden des R auf schreibgeschützt setzt C-x C-q. Die Verknüpfung zum Schreiben des Puffers lautet .

Das sind also meine Einstellungen, die ich für die Arbeit mit ESS verwende. Ich bin mit ihnen zufrieden und hatte schon seit einigen Jahren nicht mehr das Bedürfnis, etwas hinzuzufügen. Bei der Einführung von ESS für Erstbenutzer gebe ich normalerweise diese Übersicht.

Ich werde mit der endgültigen Verknüpfung enden, die für mich die am häufigsten verwendete Verknüpfung bei der Arbeit mit Emacs und insbesondere mit ESS ist und C-gdie den Befehl im Minipuffer beendet. In all den Jahren, in denen ich mit Emacs und ESS arbeite, kann ich immer noch einen Emacs-Befehl aufrufen, den ich nicht wollte. C-gDies ist in diesen Situationen sehr hilfreich.

mpiktas
quelle
Dankeschön! Diese Informationen sind sehr hilfreich. Ich werde versuchen, mein Emacs-Setup auf ähnliche Weise zu konfigurieren. In Bezug auf die betriebssystemspezifischen Punkte bin ich unter Linux (Fedora 15), daher bin ich mir nicht sicher, ob dies einen Unterschied in der Konfiguration / im Layout ausmacht.
Will
Mit Fedora sollten Sie die einfachen Emacs bekommen. Ich würde empfehlen, ESS von Hand zu installieren, anstatt die von Fedora bereitgestellte Version zu verwenden, da diese möglicherweise zu alt ist. Überprüfen Sie also zunächst, wie Text manipuliert wird und welcher Schlüssel Meta ist. Ich vermute, M-w C-y C-wwird als Kopieren, Einfügen, Ausschneiden funktionieren.
mpiktas
2

Je nachdem, wo Sie sich befinden, funktioniert dies möglicherweise nicht für Sie, aber ich habe jemanden im Flur gefunden, der es verwendet hat, und ihn mit Fragen belästigt. Bleib dabei, es lohnt sich!

Ein Tipp, den ich besonders nützlich fand, war die Verwendung des Cua-Modus. Dadurch können Emacs einige der gängigsten Tastaturkürzel (wie Speichern, Ausschneiden, Kopieren usw.) mit modernen Programmen teilen. Ich fand auch, dass der Rechteckmodus im Cua-Modus viel einfacher zu verwenden ist.

Aaron verließ Stack Overflow
quelle
2
Vielen Dank für den Tipp, ich habe den CUA-Modus aktiviert. In Bezug auf den anderen Tipp war eine meiner ursprünglichen Beweggründe für das Erlernen von ESS, zu beobachten, wie schnell einer meiner Professoren während einer Vorlesung Code bearbeiten konnte. Ich bin für den Sommer nicht auf dem Campus, aber ich werde versuchen, einen "Mentor" zu finden, wenn ich zurückkomme.
Will