Das ist eine furchtbar einfache Anfrage, und ich kann nicht glauben, dass ich die Lösung noch nicht gefunden habe, aber ich habe ohne Glück weit und breit danach gesucht.ESS & Knitr/Sweave: Wie kann man die RNW-Datei in eine interaktive Sitzung einbinden?
Ich habe eine .Rnw
Datei in Emacs geladen, ich verwende M-n s
, um es zu kompilieren. Alles funktioniert gut, und es öffnet sogar einen R
Puffer. Groß. Aber dieser Puffer ist völlig nutzlos: Er enthält nicht die Objekte, die ich gerade bezogen habe!
Beispiel minimal .Rnw
Datei:
\documentclass{article}
\begin{document}
<<>>=
foo <- "bar"
@
\end{document}
Mit M-n s
, ich habe jetzt einen neuen R-Puffer mit einer Sitzung geladen, aber:
> foo
Error: object 'foo' not found
Das ist enttäuschend. Ich möchte interaktiv mit den Daten spielen. Wie erreiche ich das? Ich möchte nicht die Datei Zeile für Zeile oder Region-by-Region mit C-c C-c
oder etwas ähnliches, jedes Mal, wenn ich meinen Code ändern. Idealerweise sollte es genau wie RStudios Quellfunktion sein, die mich mit eine vollständig vorbereitete R-Sitzung lässt.
Ich habe dies noch nicht mit Sweave ausprobiert, nur mit Knitr.
EDIT: die eval=TRUE
Chunk-Option scheint nicht zu dem richtigen Verhalten führen.
spezifisch, 'knitr' wertet den Code in' parent.frame() 'standardmäßig aus, es sei denn, Sie stricken (..., envir = globlenv())' (manchmal 'parent.frame() 'ist nur' globlenv() ', und manchmal ist es nicht –
Schön zu hören, dass Sie das behoben haben. Vielen Dank! In Anlehnung an @ Yihuis Kommentar hatte ich dies vor einiger Zeit selbst behoben, indem ich '.ess_weave()' in '" $ EMACS_HOME/site-lisp/ess/etc/ESSR.R "' '' envir = parent editierte .frame (2) '(wie in' command (file, envir = parent.frame (2)) '), anstatt der' strick() '' s default 'envir = parent.frame()'. (Ich bin nur ein ** knitr ** Benutzer in diesen Tagen, also bin ich mir nicht sicher, wie dieser Schnitt mit Sweave spielt.) –
Vielen Dank für Ihre Antwort! Die Einstellung 'esss-swv-processing-command' hat mir nicht geholfen, aber ich untersuche gerade 'envir = globalenv()'. Ich denke nicht, dass ich zur Entwicklungsversion wechseln möchte, aber ich werde Upstream ESS wie ein Falke beobachten :-) –