这是一个非常简单的请求,我无法相信我还没有找到解决方案,但我一直在寻找它而没有运气。
我在Emacs中加载了.Rnw
文件,我使用M-n s
进行编译。
一切都运行良好,甚至打开R
缓冲区。大。但那个缓冲区
完全没用:它不包含我刚刚提供的对象!
示例最小.Rnw
文件:
\documentclass{article}
\begin{document}
<<>>=
foo <- "bar"
@
\end{document}
使用M-n s
,我现在有一个新的R缓冲区,会话已加载,但是:
> foo
Error: object 'foo' not found
令人失望。我想以交互方式使用数据。
我如何实现这一目标?我不希望逐行采购文件,或者
每次更改代码时,逐个区域C-c C-c
或类似的东西。
理想情况下,它应该像RStudio的源函数一样,留给我
准备充分的R会议。
我还没有用sweave试过这个,只有knitr。
编辑:eval=TRUE
chunk选项似乎没有导致正确的行为。
答案 0 :(得分:6)
打开一个交互式R会话,然后直接调用Sweave,我相信这样(虽然未经测试)。 knitr
以相同的方式工作,但您需要先加载knitr库。
> Sweave("yourfile.Rnw")
但是,这里有一些潜在的危险。如果在执行其他操作后在会话中调用Sweave,则代码可以使用工作空间中以前的内容,从而使结果无法再生。
答案 1 :(得分:6)
最近在ESS中更改了此行为。现在,sweave和knitr直接在全局环境中执行,就像在命令行中自己编写一样。所以等待几周,直到ESSv13.09出来或使用开发版本。
或者,您也可以将ess-swv-processing-command
设置为“%s(%s)”,除自动库加载外,您将获得相同的结果。
对于记录,knitr(与sweave相反)评估其自身环境中的所有内容,除非您另外指示。
[编辑:出了点问题。我再也看不到正确的.ess_weave了。可能一些git再次提交了混乱。所以它在13.09没有修复。立即修复它。遗憾。]