ESS& Knitr / Sweave:如何将Rnw文件导入交互式会话?

时间:2013-09-07 12:00:30

标签: r emacs knitr sweave ess

这是一个非常简单的请求,我无法相信我还没有找到解决方案,但我一直在寻找它而没有运气。

我在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选项似乎没有导致正确的行为。

2 个答案:

答案 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没有修复。立即修复它。遗憾。]