我在 org-mode 文件的会话中运行 R 代码块,我通常可以让它们按预期由 Cc Cc 执行。
我认为我放在文件顶部的相关 PROPERTY 行是
#+PROPERTY: session *R*
#+PROPERTY: cache yes
#+PROPERTY: exports both
#+PROPERTY: tangle yes
有时,当我按 Cc Cc 时,什么也没有发生。AFAICT,这是一个看似随机的事件;相同的代码块可能会工作一次而失败另一次。
当这样的块失败时,我确实看到结果回显到 minibuffer,但我在 R 会话中看不到任何结果(例如,一个新的数据帧,正如我在许多情况下所期望的那样)。
如果我按 C-' 来编辑代码块,然后在每一行上按 Cj(或在每个区域上按 Cr),代码就会执行,结果会适当地回显到 org 文件并显示在 R 会话中。
以下是一些示例代码块开始行:
#+begin_src R :results silent :exports code
#+begin_src R :results value :colnames yes :exports both
我刚才通过执行 rm(list=ls())、运行代码块和在会话中执行 ls() 来测试两者,以查看结果是否存在。
第一个块很简单:
#+begin_src R :results silent :exports code
require(stringr)
require(ggplot2)
require(scales)
require(arm)
require(YaleToolkit)
require(stinepack)
require(mixtools)
require(lubridate)
source("utilities.R")
pf <- function (x,y) {
z <- sqrt(x * x + y * y)
return(x/z)
}
#+end_src
在两个测试中,它工作一次,失败一次,通过在 R 会话中查找 pf 检测到。
如果重要的话,我可以尝试生成一个经常失败的 ECM,但我怀疑这可能是某人已经看到并解决的常见设置或版本问题。它似乎与Org-mode code block evaluation有关,但那里的解决方案似乎是 :export results。在大多数情况下,我同时使用 :exports ,这似乎涵盖了这种情况,并且至少在某些情况下,我关心在会话中设置环境而不是导出到 org 文件。我从不通过 org-mode 传递数据;我只是为此使用会话。
顺便说一句,我在 XP Pro 64 上的 GNU Emacs 23.3.1 上运行 org-mode 7.8.03。