ESS plot langsung ke buffer Emacs?

33

T: bagaimana saya bisa mendapatkan ESS (R) untuk memplot langsung ke buffer Emacs?

Saat berinteraksi dengan R through ESS, R default untuk memunculkan jendela grafik terpisah di luar Emacs untuk menggambar plotnya. (Seseorang dapat, tentu saja, memilih perangkat grafis lain, yaitu cara kami memplot ke PDF, dll.) Dua masalah: pertama, jendela baru mencuri fokus dari Emacs, dan kedua, tentu akan menyenangkan untuk menjaga semuanya tetap bagus dan rapi dalam ekosistem Emacs.

Jadi: apakah ada cara untuk merencanakan "langsung" (atau bahkan secara tidak langsung) ke buffer Emacs dan, yang lebih penting, melakukannya tanpa banyak intervensi manual oleh pengguna?

Sudah ada beberapa diskusi sebelumnya di thread Stack Overflow lama ini , tetapi solusi parsial yang diusulkan tidak ideal. Mereka kebanyakan melibatkan pengubahan perangkat plotting di R (katakanlah, menjadi PNG), plotting ke file sementara, dan kemudian secara manual mengunjungi file itu dalam buffer Emacs. Itu semua menurut saya sangat kikuk, terutama jika tujuannya adalah menggunakan jendela plot / buffer secara interaktif dan menggambar banyak plot dalam satu sesi (atau menambahkan layer ke mereka dengan cepat).

Saya berspekulasi di sini, tetapi menurut saya, karena R dan Emacs mendukung SVG, itu mungkin format yang berguna untuk digunakan. Namun, tidak jelas bagi saya jika / bagaimana seseorang dapat terhubung ke proses R untuk berkomunikasi dengan cepat. Apakah ada cara untuk memiliki kode R meludah SVG langsung ke buffer Emacs, atau apakah perlu melalui perantara file sementara? Bagaimana seseorang dapat meyakinkan Emacs untuk mengunjungi file sementara baru secara otomatis ketika R membuatnya, atau memperbarui buffer plot seperti itu ketika file sementara diperbarui / ditimpa oleh plot baru?

Dan
sumber
3
Emacs tidak harus menggunakan file dan sebaliknya dapat menggunakan string untuk memasukkan gambar ke dalam buffer, lihat docstring of create-image. Saya tidak dapat membantu Anda dengan membuat R dan Emacs berkomunikasi satu sama lain untuk mencapai itu.
wasamasa
1
Ini telah dibahas pada milis ESS: lihat stat.ethz.ch/pipermail/ess-help/2013-November/009559.html
Ista

Jawaban:

5

Tidak melengkapi jawaban untuk pertanyaan, tetapi ketika seseorang menggunakan R dalam mode org-babel:

* 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

Melakukan C-c C-cini dalam mode-org akan membuat *my-R*buffer dengan buffer ESS yang berinteraksi, membuat plot dalam example.svgfile dan kemudian Anda dapat mengklik (atau tekan enter) pada tautan yang dibuat ke file, yang akan membukanya.

Org-mode dapat inline gambar, tetapi melakukannya ketika mengaktifkan fungsi ini (dengan M-x org-toggle-inline-images) atau membuka file, tetapi tidak menjalankan kode di dalamnya.

Jadi ini bukan solusi lengkap.

Resi
sumber
3
Anda bisa mendapatkan gambar untuk ditampilkan secara otomatis dengan mengatur (add-hook 'org-babel-after-execute-hook 'org-display-inline-images), tetapi ini (saya pikir) masih tidak benar-benar apa yang diinginkan OP.
Ista
0

Saya baru saja mengirim jawaban ke posting lama yang Anda maksud dalam pertanyaan Anda. Seperti yang saya tulis di sana, ini mungkin tidak bekerja untuk Anda karena itu akan menjadi perubahan dramatis dalam alur kerja komputer Anda secara keseluruhan.

Tetapi exwm , dengan memungkinkan jendela non-emacs menjadi buffer emacs, memungkinkan untuk memiliki plot R dalam buffer emacs yang dikendalikan oleh pengaturan emacs dan keybindings yang biasa.

Berikut ini contoh tampilannya:

masukkan deskripsi gambar di sini

prosoitos
sumber