Emacs 버퍼에 직접 ESS 플롯?


33

Q : ESS (R)가 Emacs 버퍼에 직접 플로팅하도록하려면 어떻게해야합니까?

ESS를 통해 R과 상호 작용할 때 R은 기본적으로 Emacs 외부에 별도의 그래픽 창을 생성하여 플롯을 그립니다. (물론, 우리는 PDF로 플롯하는 방법 등 다른 그래픽 장치를 선택할 수 있습니다.) 두 가지 문제 : 첫째, 새 창은 Emacs의 초점을 훔치고 둘째는 모든 것을 멋지고 깔끔하게 유지하는 것이 좋을 것입니다 이맥스 생태계 내에서

따라서 Emacs 버퍼에 "직접"(또는 간접적으로) 플로팅 할 수있는 방법이 있습니까? 더 중요하게는 사용자의 많은 수동 개입없이 그렇게 할 수 있습니까?

이 오래된 Stack Overflow 스레드에 대한 사전 논의가 있었지만 제안 된 부분 솔루션은 이상적이지 않습니다. 대부분 R에서 플로팅 장치를 변경 (예 : PNG로)하고 임시 파일로 플로팅 한 다음 Emacs 버퍼에서 해당 파일을 수동으로 방문합니다. 특히 목표는 플롯 창 / 버퍼를 대화식으로 사용하고 세션에서 많은 플롯을 그리거나 즉석에서 레이어를 추가하는 경우 매우 어리 석습니다.

나는 여기서 추측하고 있지만 R과 Emacs가 모두 SVG를 지원하기 때문에 유용한 형식 일 수 있습니다. 그러나 R 프로세스에 연결하여 즉시 통신 할 수 있는지 여부는 분명하지 않습니다. Rsp SVG 코드를 Emacs 버퍼에 직접 넣을 수있는 방법이 있습니까, 아니면 임시 파일의 중개 과정을 거쳐야합니까? R이 파일을 만들 때 Emacs가 자동으로 새 임시 파일을 방문하도록하거나 임시 파일이 새 플롯에 의해 업데이트 / 덮어 질 때 이러한 플롯 버퍼를 어떻게 업데이트하도록 설득 할 수 있습니까?


3
Emacs는 파일을 사용할 필요가없고 대신 문자열을 사용하여 이미지를 버퍼에 삽입 할 수 있습니다 (의 docstring 참조) create-image. 실제로 R과 Emacs가 서로 통신하여 그 목표를 달성하도록 도와 줄 수는 없습니다.
wasamasa

1
ESS 메일 링리스트에서 논의되었습니다 : stat.ethz.ch/pipermail/ess-help/2013-November/009559.html
Ista

답변:


5

질문에 대한 완전한 대답은 아니지만 org-mode의 babel에서 R을 사용할 때 :

* 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-corg-mode에서이 작업을 수행하면 *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

방금 귀하의 질문에서 언급 한 이전 게시물대한 답변 을 게시 했습니다 . 필자가 작성한 것처럼 전체 컴퓨터 워크 플로가 크게 바뀌기 때문에 이것이 효과가 없을 수 있습니다.

그러나 exema 는 non-emacs 창이 emacs 버퍼가되도록 허용함으로써 일반적인 emacs 설정 및 키 바인딩에 의해 제어되는 emacs 버퍼에 R 플롯을 가질 수 있습니다.

다음은이 모습에 대한 예입니다.

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.