Evaluating code in .Rnw (R/tex) buffers

Stephen Eglen eglen at pcg.wustl.edu
Tue Mar 26 20:59:15 CET 2002


I have recently started using Sweave, the R/S package by Friedrich
Leisch that allows R and LaTeX code to be intermixed in the same
document.  It is a very nice package, if you've not seen it

Has anyone else started using ESS for writing .Rnw files?  If so, I
had a couple of questions:

1.  Everytime the point jumps out of a code chunk, the major mode
correctly switches from R to LaTeX.  In the same buffer, if I return
into a code chunk, and evaluate a line of code (using
e.g. ess-eval-line-and-step), I am again asked which "Process to load

For example, do "M-x R" then load the following into a file,
e.g. test.Rnw:
% -*- mode: noweb; noweb-default-code-mode: R-mode; -*-


Some \LaTeX code

Another chunk

If I put point on the "rnorm" line, then M-x ess-eval-line-and-step, I
am prompted which process to send the line to, before the line is
evaluated.  If I move out of that chunk and then back in, it will then
ask me again which process I want to send the line to.

It seems that everytime I re-enter the code chunk, the variable
ess-local-process-name is reset to nil.  This happens since the
variables in S-editing-alist get reset to the cdr.  In the case of
ess-local-process-name name, there is no "default value", so if it
already has got a value, perhaps it should keep that value, rather
than being reset to nil?

So, my suggestion is to test within ess-setq-vars-local that cdr of
each alist entry is non-nil before setting the value:

(defun ess-setq-vars-local (alist &optional buf)
  "Set language variables from ALIST, in buffer BUF, if desired."
  (if buf (set-buffer buf))
  (mapcar (lambda (pair)
	    (make-local-variable (car pair))
	    (if (cdr pair)	;; add this test?
		(set (car pair) (eval (cdr pair)))))
   (format "(ess-setq-vars-LOCAL): language=%s, dialect=%s, buf=%s, comint..echoes=%s, comint..sender=%s\n"
           ess-language ess-dialect buf comint-process-echoes comint-input-sender)))

2.  Has anyone else got any shortcuts for running Sweave on the
current .Rnw buffer?  At the moment, once I've finished editing the
.Rnw file, I switch to the *R* buffer and then run the command:

> Sweave("chap1.Rnw"); system("latex chap1")

So, if anyone had any suggestions on keybindings/approaches, I'd be
glad to hear of them.

Best wishes,
Stephen Eglen

ess-help mailing list -- To (un)subscribe, send
subscribe	or	unsubscribe
(in the "body", not the subject !)  To: ess-help-request at stat.math.ethz.ch

More information about the ESS-help mailing list