Joh*_*ton 13 emacs elisp r sweave
在LaTeX中编辑Sweave文档时(使用Noweb模式),Emacs知道"忽略"<< >> = blocks中的代码.但是,对于interstitial\Sexpr {}块,情况并非如此.鉴于通过'$'和LaTeX按列引用R来使用$来设置方程,这些\ Sexpr {}块通常会破坏语法高亮,如下所示:
我对elisp和Emacs语法突出显示有一个非常基本的理解,但我希望有可能在.emacs中添加一些东西来禁用\ Sexpr {}中的任何解析/ $检测.
我认为使用ESS的emacs有正确的语法高亮显示为Sweave?
无论如何,最简单的"修复"就是不使用$
运算符而是使用运算符[[
.例如:
foo$p.value
foo[['p.value']]
Run Code Online (Sandbox Code Playgroud)
应该给出相同的结果.我认为foo$p.value
只是简称foo[["p.value",exact=FALSE]]
我也没有解决方法,但我会传递我的解决方法,这是永远(很少,很少)在\Sexpr
块中进行任何处理,而是存储我想要\Sexpr
在变量中使用的东西,并在我做主要计算的同一块.
<<echo=FALSE, results=hide>>=
t1 <- chisq.test(someVar)
p1 <- formatC(t1$p.value, format="%f", digits=2)
@
\dots with a $p$-value of \Sexpr{p1}.
Run Code Online (Sandbox Code Playgroud)
虽然这有一些缺点,但我发现它可以帮助我更好地跟踪我想要呈现的内容,以及我想如何呈现它.
另外,考虑使用formatC
而不是round
因为它可以保持显着的零(即0.10而不是0.1).
我没有好的答案,因为我不是Emacs黑客,所以我通常做两件事之一:
无论是添加一个简单 % $
的行注释来自于"关闭"的数学表达式$
来$
,
或者将表达式重写为不使用$
基于子集的:
round(as.numeric(chisq.test(someVar)["p.value"]), 2)
.