Frage

Ich liebe die Emacs ESS-Kombination. Ich liebe Sendeleitungen, Funktionen, Regionen und Puffer von Code in die Befehlszeile für die Auswertung ohne mit der Maus.

Allerdings habe ich bemerkt, dass der Eval Function Befehl in Emacs ist viel langsamer als einfach source("fns.R") ausgeführt wird, wo fns.R die Datei, die die Funktion I auswerten möchten enthält.

Warum ist dies der Fall?

War es hilfreich?

Lösung

Ich denke, die Leute bei ess Liste für Sie bessere Antworten haben. Aber wenn Sie unsichtbar zu bewerten, ist die Verarbeitung sehr viel schneller. Versuchen Sie setzen diese in Ihrer .emacs-Datei:

(setq ess-eval-visibly-p nil)

Andere Tipps

Ich kann nur raten, aber wenn Sie sagen,

  • source("fns.R") Sie die nicht Emacs / ESS überhaupt und die Rechenzeit ist nur die Zeit R in der Datei zu schlürfen nimmt und es zu verdauen - wahrscheinlich sehr wenig, während

  • Eval Function passiert einen Bereich zum Emacs Interpreter, der es (vermutlich Zeile-für-Zeile) an den R-Motor zu senden hat, die sie dann in stückweise verdaut.

und das wäre der zweite Ansatz langsamer machen.

Doch in den großen Plan der Dinge, wer sich interessiert? Ich sende oft ganze Puffer oder große Regionen, und das braucht vielleicht einen großen Teil einer Sekunde? Ich denke immer noch, --- so wie Sie sagen, ---, dass die Fähigkeit, für das (reiche) Editor und die zugrunde liegende Sprache, die Art und Weise zu interagieren, etwas extrem leistungsfähig ist.

Ein großes Lob an den Emacs Hacker und das ESS-Team.

Wenn Sie wollen Ihre ganzen Puffer auszuführen - wenn Sie in Unix / Linux sind, können Sie auch das Skript mit einem shebang beginnen:

#!/usr/bin/Rscript

Und Ihre Datei ausführbar machen

chmod 744 myscript.r

(Ich erinnere mich, zu lesen Google ihre r Skripte mag in .R zu beenden, aber na ja ...) und man kann es auf diese Weise ausführen:

./myscript.r

Und mit Argumenten,

./myscript.r arg1 arg2

(was ich habe tatsächlich verwendet, um eine R-Funktion aus einem Matlab-Systemaufruf aufzurufen) und in der R-Datei können Sie verwenden

userargs = tail(commandArgs(),2) 

arg1 und arg2 zu bekommen. Sie können auch ohne die shebang tun:

R --no-save < myscript.r arg1 arg2

und so weiter. Bei Windows erinnere ich es war

R CMD BATCH myscript.r

oder etwas in diesem Sinne ... Ich habe ein wenig Verzögerung bemerken, wenn Befehle durch ESS läuft (obwohl ich ESS lieben teuer ) so, wenn ich weiß, ich will ich den gesamten Puffer laufen manchmal eine Shell unter dem R-Skript in einem Fenster starten (wo die R-Puffer normalerweise befinden würden) und die Tricks oben verwenden.

Sie können auch verwenden

echo 'source("myscript.r")' | R --no-save

als auch - der Nutzen dieser Methoden über Lauf ‚Quelle (‚myscript.r‘)‘ der Verwendung direkt in R oder R-Puffer ist, dass Sie mit einem klaren Arbeitsbereich anfangen (auch wenn Sie, dass Ihre vorsichtig sein sollte. Rprofile nicht geladen werden, wenn Sie "Quelle (‚~ / .Rscript‘) nennen explizit in‚myscript.r‘), so können Sie sicher sein, dass Ihr Skript in sich geschlossen ist (es die richtigen Bibliotheken aufruft, Ihre lexikalisch-scoped Funktionen sind nicht unbeabsichtigte Variablen im globalen Raum verweisen, die Sie zu entfernen vergessen, und so weiter).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top