ESSはEmacsバッファーに直接プロットしますか?


33

Q: ESS(R)を取得してEmacsバッファーに直接プロットするにはどうすればよいですか?

ESSを介してRと対話する場合、Rはデフォルトで、Emacsの外部に別のグラフィックウィンドウを作成して、プロットを描画します。(もちろん、他のグラフィカルデバイスを選択することができます。これはPDFにプロットする方法などです)2つの問題:1つは、新しいウィンドウがEmacsからフォーカスを奪い、2つ目は、すべてをきれいに整頓することですEmacsエコシステム内。

だから:Emacsバッファーに「直接」(または間接的に)プロットする方法はありますか、さらに重要なことは、ユーザーによる多くの手動の介入なしでプロットする方法ですか?

この古いStack Overflowスレッドでいくつかの事前の議論がありましたが、提案された部分的な解決策は理想的ではありません。ほとんどの場合、Rのプロットデバイスを変更し(PNGなど)、一時ファイルにプロットしてから、Emacsバッファーでそのファイルに手動でアクセスします。特に目標がインタラクティブにプロットウィンドウ/バッファを使用し、セッションで多くのプロットを描画する(またはその場でレイヤを追加する)場合は、すべてが非常に不格好だと思います。

私はここで推測していますが、RとEmacsの両方がSVGをサポートしているので、それが使用するのに便利なフォーマットであるかもしれないと思います。ただし、Rプロセスにフックしてオンザフライで通信できるかどうか/どのようにすればよいかは明確ではありません。RがSmacコードをEmacsバッファーに直接吐き出す方法はありますか、それとも一時ファイルの中間を通過する必要がありますか?Rが作成したときにEmacsに自動的に新しい一時ファイルを訪問させたり、一時ファイルが新しいプロットで更新/上書きされたときにそのようなプロットバッファーを更新したりするにはどうすればよいでしょうか?


3
Emacsはファイルを使用する必要はなく、代わりに文字列を使用してバッファに画像を挿入できますcreate-image。のdocstringを参照してください。しかし、実際にRとEmacsが相互に通信してそれを達成することはできません。
wasamasa

1
これはESSメーリングリストで議論されています。stat.ethz.ch/ pipermail / ess
イスタ

回答:


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-modeはイメージをインライン化できますが、この機能を(を使用してM-x org-toggle-inline-images)トグルするとき、またはファイルを開くときに実行しますが、コードを実行するときは実行しません。

したがって、これは完全なソリューションではありません。


3
を設定することで画像を自動的に表示することができます(add-hook 'org-babel-after-execute-hook 'org-display-inline-images)が、これはまだOPが望んでいたものではない(と思う)。
イスタ

0

あなたがあなたの質問で言及している古い投稿答えを投稿しまし。私がそこに書いたように、これはあなたの全体的なコンピューターのワークフローにかなり劇的な変化をもたらすので、あなたにはうまくいかないかもしれません。

ただし、exwmは、非emacsウィンドウをemacsバッファにすることにより、通常のemacs設定とキーバインドによって制御されるemacsバッファにRプロットを作成できます。

これがどのように見えるかの例を次に示します。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.