ESS วางแผนโดยตรงกับ Emacs buffer หรือไม่?


33

ถาม:ฉันจะให้ ESS (R) พล็อตตรงไปยังบัฟเฟอร์ Emacs ได้อย่างไร

เมื่อโต้ตอบกับ R ถึง ESS ค่าเริ่มต้น R จะวางไข่หน้าต่างกราฟิกแยกต่างหากด้านนอกของ Emacs เพื่อวาดแผนผัง (แน่นอนหนึ่งสามารถเลือกอุปกรณ์กราฟิกอื่น ๆ ซึ่งเป็นวิธีที่เราวางแผนเป็น PDF และอื่น ๆ ) สองประเด็น: ประการแรกหน้าต่างใหม่ขโมยโฟกัสจาก Emacs และที่สองแน่นอนว่ามันจะดีเพื่อให้ทุกอย่างเรียบร้อยและเป็นระเบียบเรียบร้อย ภายในระบบนิเวศของ Emacs

ดังนั้น: มีวิธีใดบ้างในการพล็อต "โดยตรง" (หรือแม้แต่ทางอ้อม) ไปยังบัฟเฟอร์ของ Emacs และที่สำคัญกว่านั้นคือการทำเช่นนั้นโดยไม่มีการแทรกแซงโดยผู้ใช้จำนวนมาก?

มีการพูดคุยกันก่อนหน้านี้ในเธรดสแต็คโอเวอร์โฟลว์เก่านี้แต่การแก้ปัญหาบางส่วนที่เสนอนั้นไม่เหมาะ พวกเขาส่วนใหญ่เกี่ยวข้องกับการเปลี่ยนอุปกรณ์การพล็อตใน R (พูดเป็น PNG) การพล็อตเป็นไฟล์ชั่วคราวจากนั้นไปที่ไฟล์นั้นด้วยตนเองในบัฟเฟอร์ Emacs ทั้งหมดนี้ทำให้ฉันรู้สึกว่าเป็น clunky มากโดยเฉพาะอย่างยิ่งถ้าเป้าหมายคือการใช้หน้าต่างพล็อต / บัฟเฟอร์แบบโต้ตอบและวาดพล็อตจำนวนมากในเซสชัน (หรือเพิ่มเลเยอร์ให้กับพวกเขาได้ทันที)

ฉันคาดเดาที่นี่ แต่มันทำให้ฉันรู้สึกว่าเนื่องจากทั้ง R และ Emacs รองรับ SVG นั่นอาจเป็นรูปแบบที่มีประโยชน์ในการใช้ อย่างไรก็ตามมันไม่ชัดเจนสำหรับฉันหาก / วิธีการหนึ่งสามารถขอเข้ากระบวนการ R เพื่อสื่อสารได้ทันที มีวิธีที่จะให้ R spit รหัส 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 ใน babel ของโหมด org:

* 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นี้ในโหมดองค์กรจะสร้าง*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)แต่นี่คือ (ฉันคิดว่า) ยังไม่จริง ๆ ตามที่ OP ต้องการ
Ista

0

ฉันเพิ่งโพสต์คำตอบไปยังโพสต์เก่าที่คุณอ้างถึงในคำถามของคุณ ดังที่ฉันได้เขียนไว้ที่นี่สิ่งนี้อาจไม่ได้ผลสำหรับคุณเพราะมันเป็นการเปลี่ยนแปลงครั้งใหญ่ในเวิร์กโฟลว์คอมพิวเตอร์โดยรวมของคุณ

แต่exwmโดยอนุญาตให้หน้าต่างที่ไม่ใช่ emacs เป็นบัฟเฟอร์ emacs อนุญาตให้มีพล็อต R ในบัฟเฟอร์ emacs ซึ่งควบคุมโดยการตั้งค่า emacs และปุ่มลัดปกติ

นี่คือตัวอย่างของสิ่งที่ดูเหมือนว่า:

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.