【问题标题】:no output from org-babel code using R使用 R 的 org-babel 代码没有输出
【发布时间】:2015-06-28 12:47:15
【问题描述】:

组织 8.2.10 Emacs 24.5.1 OSX 10.10.3

#+BEGIN_SRC R    
1 + 2
#+END_SRC

#+RESULTS:
: 3

但有

#+BEGIN_SRC R
  x <- rnorm(100)
  summary(x)
#+END_SRC

#+RESULTS:

“代码块没有输出” 并且 *Messages* 缓冲区包含:

Error reading results: (beginning-of-buffer)
Code block produced no output.

我不确定为什么我没有看到第二个示例的任何输出。它在我机器上的 R 安装中运行 find,

如果有任何帮助,我将不胜感激。

【问题讨论】:

    标签: r emacs org-babel


    【解决方案1】:

    在标题行添加:results output,例如

    #+BEGIN_SRC R :results output
      x <- rnorm(100)
      summary(x)
    #+END_SRC
    
    #+RESULTS:
    :     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
    : -2.63500 -0.42370  0.02539  0.04136  0.48370  1.92000 
    

    组织can capture results from code blocks in two different ways:

    以下选项是互斥的,并指定应如何从代码块中收集结果。

    • value 这是默认设置。结果是代码块中最后一条语句的值。此标头参数将评估置于功能模式。请注意,在某些语言中,例如 Python,使用此结果类型需要在源代码块的主体中​​包含 return 语句。例如,:results value

    • output 结果是代码块执行期间打印到 STDOUT 的所有内容的集合。此标头参数将评估置于脚本模式中。例如,:results output

    由于您的第一个块返回常规值,因此它无需为 :results 指定任何内容即可使用默认的 value 设置。

    你的第二个区块returns a value that must be explicitly printed

    默认方法返回类c("summaryDefault", "table") 的对象,该对象具有专门的print 方法。

    R code that returns values with specialized print methods must be treated specially in Org(强调我的):

    如果源代码块使用基于网格的 R 图形,例如 lattice 和 ggplot2 包,则必须注意 print() 图形对象,指定 :results output,或在 @987654338 中运行代码@。 这是因为来自 lattice 和 ggplot2 的图形函数返回的对象必须使用 print 函数显式打印才能看到它们。这会在交互式运行时自动发生,例如 :session,但在内部调用时另一个功能,它没有。 :results value被定义为操作的方式,设备和ggplot2函数调用被包装在一个main函数中,除非对象被专门打印出来,否则不会产生输出。

    如前所述,显式调用print 并在:session 中运行代码是其他可能的解决方案。

    【讨论】:

    • 作为非 Emacs 用户(但相当称职的 R 用户)我不清楚为什么您认为第二个代码段不应该产生任何价值。带有数字向量参数的汇总函数返回一个具有类“summaryDefault”的结构。
    • @BondedDust,你appear to be correct。我对 R 的经验很少,但对 Emacs 的经验却很多,所以我最初的答案是这样的。我做了一些研究并更新了我的答案;希望这可以澄清事情。
    • 嘿。 “出现”?只出现?我在发布之前确实查看了该页面,但更重要和最终我执行了dput(summary(x))
    • @BondedDust,我不是不情愿的意思。我倾向于避免在我不是专家的领域做出结论性陈述。需要明确的是:根据您的 cmets 的内容和他们提示我查看的文档,您正确的:-)。
    • 请记住 outputvalue 之间的区别。如果我没记错的话,Org 模式源块默认将值输出到相应的结果箱中。根据我对 R 的公认相对有限的理解,R REPL 打印所有执行操作的输出。我相信,这就是为什么 summary 可以在 R REPL 中产生所需的输出,但在 Org 模式源块中不能相应地管道输出,除非明确设置了 result 类型——因为 summary 不是print 函数本身。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多