Grafico ESS direttamente su un buffer Emacs?


33

D: come posso ottenere ESS (R) per tracciare direttamente su un buffer Emacs?

Quando interagisce con R tramite ESS, per impostazione predefinita R genera una finestra grafica separata al di fuori di Emacs per disegnare i suoi grafici. (Naturalmente, è possibile scegliere altri dispositivi grafici, che è il modo in cui stampiamo in PDF, ecc.) Due problemi: in primo luogo, la nuova finestra ruba l'attenzione da Emacs, e in secondo luogo, sarebbe sicuramente bello mantenere tutto in ordine e in ordine all'interno dell'ecosistema Emacs.

Quindi: esiste un modo per tracciare "direttamente" (o anche indirettamente) un buffer Emacs e, cosa più importante, farlo senza un grande intervento manuale da parte dell'utente?

C'era stata qualche discussione precedente in questo vecchio thread Stack Overflow , ma le soluzioni parziali proposte non sono l'ideale. Esse implicano principalmente la modifica del dispositivo di stampa in R (diciamo, in PNG), la stampa in un file temporaneo e quindi la visita manuale di quel file in un buffer Emacs. Tutto ciò mi sembra molto goffo, soprattutto se l'obiettivo è utilizzare la finestra / buffer della trama in modo interattivo e disegnare molti grafici in una sessione (o aggiungere livelli al volo al volo).

Sto speculando qui, ma mi sembra che, dato che sia R che Emacs supportano SVG, potrebbe essere un formato utile da usare. Tuttavia, non mi è chiaro se / come si possa collegarsi al processo R per comunicare al volo. C'è un modo per avere il codice SVG sputato direttamente in un buffer Emacs o dovrebbe passare attraverso l'intermediario di un file temporaneo? Come si può convincere Emacs a visitare automaticamente un nuovo file temporaneo quando R lo crea o aggiornare un tale buffer di trama quando il file temporaneo viene aggiornato / sovrascritto da una nuova trama?


3
Emacs non deve usare un file e può invece usare una stringa per inserire un'immagine in un buffer, vedi la documentazione di create-image. Tuttavia, non posso aiutarti a far comunicare R ed Emacs per raggiungere questo obiettivo.
Wasamasa,

1
Questo è stato discusso sulla mailing list ESS: vedi stat.ethz.ch/pipermail/ess-help/2013-November/009559.html
Ista,

Risposte:


5

Non una risposta completa alla domanda, ma quando si usa R nella babele della modalità 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

Facendo C-c C-cquesto in modalità org creerà un *my-R*buffer con un buffer ESS interagente, creerà il grafico nel example.svgfile e quindi sarà possibile fare clic (o premere invio) sul collegamento creato al file, che lo aprirà.

La modalità Org è in grado di incorporare l'immagine, ma lo fa quando si attiva questa funzionalità (con M-x org-toggle-inline-images) o quando si apre il file, ma non esegue un codice al suo interno.

Quindi questa non è una soluzione completa.


3
È possibile ottenere la visualizzazione automatica dell'immagine impostando (add-hook 'org-babel-after-execute-hook 'org-display-inline-images), ma questo è (penso) ancora non proprio quello che voleva l'OP.
Ista,

0

Ho appena pubblicato una risposta al vecchio post a cui ti riferisci nella tua domanda. Come ho scritto lì, questo potrebbe non funzionare per te dal momento che sarebbe un cambiamento abbastanza drammatico nel tuo flusso di lavoro globale del computer.

Ma exwm , consentendo a qualsiasi finestra non-emacs di essere un buffer emacs, consente di avere grafici R nei buffer emacs che sono controllati dalle normali impostazioni e combinazioni di tasti di emacs.

Ecco un esempio di come appare:

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.