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 R
das 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 3
zum vertikalen Teilen von Fenstern, C-x 1
zum Festlegen des aktuellen Puffers zum einzigen Fenster und C-x 2
zum 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 pl
R-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-g
die 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-g
Dies ist in diesen Situationen sehr hilfreich.