【问题标题】:ESS & Knitr/Sweave: How to source the Rnw file into an interactive session?ESS & Knitr/Sweave:如何将 Rnw 文件导入交互式会话?
【发布时间】:2013-09-07 12:00:29
【问题描述】:

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

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

【问题讨论】:

    标签: r emacs knitr sweave ess


    【解决方案1】:

    最近在 ESS 中更改了此行为。现在 sweave 和 knitr 直接在全局环境中执行,就好像你在命令行自己写一样。所以再等几周,直到 ESSv13.09 发布或使用开发版本。

    或者,您也可以将ess-swv-processing-command 设置为“%s(%s)”,除了自动加载库之外,您将获得相同的结果。

    为了记录,knitr(与 sweave 不同)会评估其自身环境中的所有内容,除非您另有指示。

    [编辑:出了点问题。我再也看不到正确的 .ess_weave 了。可能又是一些 git commit 混乱。所以它在 13.09 中没有修复。现在修复它。对不起。]

    【讨论】:

    • 具体来说,knitr 默认评估parent.frame() 中的代码,除非你knit(..., envir = globalenv())(有时parent.frame() 只是globalenv(),有时不是)
    • 很高兴听到您已解决此问题。谢谢!根据@Yihui 的评论,我前段时间通过在"$EMACS_HOME/site-lisp/ess/etc/ESSR.R" 中编辑.ess_weave() 以使用envir=parent.frame(2)(如command(file, envir = parent.frame(2)))为自己解决了这个问题,而不是knit() 的默认@987654332 @。 (这些天我只是一个 knitr 用户,所以不确定该编辑如何与 Sweave 一起使用。)
    • 感谢您的回复!设置ess-swv-processing-command 对我没有用,但我现在正在考虑使用envir=globalenv()。我不认为我想切换到开发版本,但我会像鹰一样看上游 ESS :-)
    【解决方案2】:

    打开一个交互式 R 会话,然后直接调用 Sweave,我相信是这样的(虽然未经测试)。 knitr 的工作方式相同,但您需要先加载 knitr 库。

    > Sweave("yourfile.Rnw")
    

    不过,这里有一些潜在的危险。如果您在完成其他操作后在会话中调用 Sweave,您的代码可以使用工作区中以前的内容,从而使您的结果无法重现。

    【讨论】:

    • 这有点杂乱无章,但至少它有效。正确的 knitr 方法似乎是 knitr::knit("file.Rnw")。为了重现性,应该首先使用rm(list=ls()),这样旧对象就不会干扰。所以我想我唯一的选择是以某种方式将其绑定到某个快捷方式......
    • 我明白了,没有意识到您正在为此寻找 ESS 键绑定。很高兴听到您找到了另一个适合您的答案。
    猜你喜欢
    • 1970-01-01
    • 2018-09-07
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多