When editing an Sweave document in LaTeX (using the Noweb mode), Emacs knows to "ignore" code that is in <<>>= blocks. However, for interstitial \Sexpr{} blocks, this isn't the case. Given that R references by columns via '$' and LaTeX uses $ to set-off equations, these \Sexpr{} blocks often break the syntax highlighting, like so:
I have a very rudimentary understanding the elisp & Emacs syntax highlighting, but my hope is that it might be possible to add something to .emacs that will disable any parsing/$ detection within \Sexpr{}'s.
I don't have a fix either, but I'll pass along my workaround, which is to never (well, rarely) do any processing in
\Sexpr
chunks but instead to store things I want to use in\Sexpr
in variables, and to do so in the same chunk I do the main calculations in.While there are some downsides to this, I find it helps me to better keep track of what I want to present, and how I want to present it.
As an aside, consider using
formatC
instead ofround
as it can keep significant zeros (ie, 0.10 instead of 0.1).I thought emacs with ESS has correct syntax highlighting for Sweave?
Anyway, the easiest "fix" is to just not use the
$
operator but[[
instead. For example:Should give the same result. I think
foo$p.value
is just short forfoo[["p.value",exact=FALSE]]
I have no good answer for you as I am not an Emacs hacker, so I usually do one of two things:
Either add a simple
% $
comment at the of the line to "close" the math expression from$
to$
,Or rewrite the expression to not use
$
-based subsetting:round(as.numeric(chisq.test(someVar)["p.value"]), 2)
.