Нет вывода из кода org-babel с использованием R

Org 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 на моей машине,

Я был бы очень благодарен за любую помощь.

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 

Org может захватывать результаты из блоков кода двумя различными способами:

Следующие параметры являются взаимоисключающими и указывают, как следует собирать результаты из блока кода.

  • value Это по умолчанию. Результатом является значение последнего оператора в блоке кода. Этот аргумент заголовка переводит оценку в функциональный режим. Обратите внимание, что в некоторых языках, например Python, использование этого типа результата требует, чтобы return Оператор должен быть включен в тело блока исходного кода. Например, :results value,

  • output Результатом является сбор всего, что печатается в STDOUT во время выполнения блока кода. Этот аргумент заголовка переводит оценку в режим сценариев. Например, :results output,

Поскольку ваш первый блок возвращает обычное значение, он работает без указания чего-либо для :results, используя по умолчанию value установка.

Ваш второй блок возвращает значение, которое должно быть явно напечатано:

Метод по умолчанию возвращает объект класса c("summaryDefault", "table") который имеет специализированный print метод.

R код, который возвращает значения со специализированным print Методы должны быть обработаны специально в орг (выделено мое):

Если в блоке исходного кода используется R-графика на основе сетки, например, пакеты lattice и ggplot2, то необходимо позаботиться либо о print() графическом объекте, укажите :results output или запустите код в :session, Это связано с тем, что графические функции из решеток и ggplot2 возвращают объекты, которые должны быть явно напечатаны, чтобы их увидеть, используя функцию печати. Это происходит автоматически при запуске в интерактивном режиме, например, :session, но при вызове внутри другой функции это не так. Путь :results value определяется для работы, вызовы устройства и функции ggplot2 заключены в main функции, и если объект специально не напечатан, вывод не производится.

Как уже упоминалось, явно print и запустить код в :session другие возможные решения.

Другие вопросы по тегам