Діаграма ESS безпосередньо на буфер Emacs?


33

Питання: як я можу змусити ESS (R) побудувати графік безпосередньо в буфері Emacs?

Під час взаємодії з R через ESS, R за замовчуванням нерестує окреме графічне вікно поза Emacs, щоб намалювати його графіки. (Звичайно, можна вибрати інші графічні пристрої; саме так ми плануємо PDF та ін.) Два питання: по-перше, нове вікно вкраде фокус від Emacs, а по-друге, це, безумовно, було б добре, щоб все було добре і охайно. в межах екосистеми Emacs.

Отже: чи є змога побудувати "безпосередньо" (або навіть опосередковано) буфер Emacs і, що ще важливіше, зробити це без великого ручного втручання з боку користувача?

У цій старій нитці переповнення стека було попередньо обговорено , але пропоновані часткові рішення не є ідеальними. Вони в основному пов'язані із зміною пристрою побудови графіку в R (скажімо, в PNG), складанням тимчасового файлу, а потім відвідуванням цього файлу вручну в буфері Emacs. Це все вражає мене як дуже незграбного, особливо якщо мета полягає в тому, щоб використовувати вікно / буфер ділянки інтерактивно та намалювати безліч сюжетів під час сеансу (або додати шари до них на льоту).

Я спекулюю тут, але мені вражає, що оскільки R і Emacs підтримують SVG, це може бути корисним форматом. Однак мені незрозуміло, чи / як можна підключитися до процесу R, щоб спілкуватися на льоту. Чи є спосіб R кодувати SVG-код безпосередньо в буфер Emacs, чи потрібно буде пройти посередника тимчасового файлу? Як можна переконати Emacs автоматично відвідувати новий тимчасовий файл, коли R створює його, або оновлювати такий буфер сюжету, коли тимчасовий файл оновлюється / перезаписується новим сюжетом?


3
Emacs не повинен використовувати файл, а може замість цього використовувати рядок, щоб вставити зображення в буфер, див. Docstring create-image. Я не можу допомогти вам фактично змусити R та Emacs спілкуватися між собою, щоб досягти цього.
wasamasa

1
Про це йшлося у списку розсилки ESS: див. Stat.ethz.ch/pipermail/ess-help/2013-November/009559.html
Ista,

Відповіді:


5

Не повністю відповідь на запитання, але коли використовується R в бабі org-mode:

* My example
#+name: simple-org-example
#+begin_src R :session *my-R* :dir "." :results output graphics :file example.svg :width 18 :height 9
  plot(cyl~mpg,data=mtcars)
#+end_src

Якщо зробити C-c C-cце в org-режимі, ви створите *my-R*буфер із взаємодіючим ESS-буфером, створіть графік у example.svgфайлі, а потім можете натиснути (або натиснути Enter) на створеному посиланні на файл, який відкриє його.

Org-режим здатний вбудовувати зображення, але це робиться під час перемикання цієї функціональності (з M-x org-toggle-inline-images) або при відкритті файлу, але не при запуску в ньому коду.

Тож це не повне рішення.


3
Ви можете змусити зображення відображатися автоматично, встановивши (add-hook 'org-babel-after-execute-hook 'org-display-inline-images), але це (я думаю) все ще не дуже те, чого хотів ОП.
Іста

0

Я щойно опублікував відповідь на стару публікацію, про яку ви посилаєтесь у своєму запитанні. Як я писав там, це може не працювати для вас, оскільки це буде досить різкою зміною у вашому загальному робочому процесі на комп’ютері.

Але exwm , дозволяючи будь-якому вікні не-emacs бути буфером emacs, дозволяє мати R-графіки в буферах emacs, які контролюються звичайними налаштуваннями emacs та сполученнями клавіш.

Ось приклад того, як це виглядає:

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.