O ESS plotou diretamente para um buffer Emacs?

33

P: como posso obter o ESS (R) para plotar diretamente em um buffer Emacs?

Ao interagir com o R através do ESS, o R padrão é gerar uma janela gráfica separada fora do Emacs para desenhar suas plotagens. (É claro que é possível escolher outros dispositivos gráficos, que é como plotamos para PDF etc.) Duas questões: primeiro, a nova janela rouba o foco do Emacs e, segundo, seria bom manter tudo limpo e arrumado dentro do ecossistema Emacs.

Então: existe alguma maneira de plotar "diretamente" (ou até indiretamente) para um buffer Emacs e, mais importante, fazê-lo sem muita intervenção manual do usuário?

Houve alguma discussão anterior nesse antigo thread Stack Overflow , mas as soluções parciais propostas não são ideais. Elas envolvem principalmente a alteração do dispositivo de plotagem em R (por exemplo, para PNG), plotagem para um arquivo temporário e, em seguida, a visita manual desse arquivo em um buffer do Emacs. Tudo isso me parece muito desajeitado, especialmente se o objetivo é usar a janela / buffer de plotagem interativamente e desenhar muitos gráficos em uma sessão (ou adicionar camadas a eles rapidamente).

Estou especulando aqui, mas me parece que, como o R e o Emacs suportam SVG, esse pode ser um formato útil a ser usado. No entanto, não está claro para mim se / como alguém poderia se conectar ao processo R para se comunicar em tempo real. Existe uma maneira de o R cuspir o código SVG diretamente no buffer do Emacs ou precisaria passar pelo intermediário de um arquivo temporário? Como convencer o Emacs a visitar um novo arquivo temporário automaticamente quando R o cria, ou atualizar um buffer de plotagem quando o arquivo temporário é atualizado / substituído por uma nova plotagem?

Dan
fonte
3
O Emacs não precisa usar um arquivo e, em vez disso, pode usar uma string para inserir uma imagem em um buffer, consulte a documentação de create-image. Não posso ajudá-lo a realmente fazer o R ​​e o Emacs se comunicarem para conseguir isso.
wasamasa
1
Isso foi discutido na lista de discussão do ESS: consulte stat.ethz.ch/pipermail/ess-help/2013-November/009559.html
Ista

Respostas:

5

Não é uma resposta completa para a pergunta, mas quando se usa R no babel do modo organizacional:

* 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

Fazer C-c C-cisso no modo organizacional criará um *my-R*buffer com um buffer ESS interagindo, criará a plotagem no example.svgarquivo e você poderá clicar (ou pressionar enter) no link criado para o arquivo, que será aberto.

O modo organizacional é capaz de inline a imagem, mas faz isso ao alternar essa funcionalidade (com M-x org-toggle-inline-images) ou ao abrir o arquivo, mas não ao executar um código nele.

Portanto, essa não é uma solução completa.

Rémi
fonte
3
Você pode exibir a imagem automaticamente configurando (add-hook 'org-babel-after-execute-hook 'org-display-inline-images), mas acho que ainda não é o que o OP queria.
Ista 24/01
0

Acabei de publicar uma resposta para a postagem antiga a que você está se referindo na sua pergunta. Como escrevi lá, isso pode não funcionar para você, pois seria uma mudança bastante dramática no fluxo de trabalho geral do computador.

Mas o exwm , ao permitir que qualquer janela que não seja do emacs seja um buffer do emacs, permite ter gráficos R em buffers do emacs, que são controlados pelas configurações e combinações de teclas usuais do emacs.

Aqui está um exemplo de como isso se parece:

insira a descrição da imagem aqui

prosoitos
fonte