Quais são algumas boas referências / conselhos para aprender Estatísticas do Emacs Speaks (com R)?

9

Uso R há vários anos, mas sempre usei uma GUI como Tinn-R, JGR e, mais recentemente, R-Studio.

Embora eu goste da interface do R-Studio, sinto que, para programas mais longos com poucos / nenhum gráfico, eu poderia codificar com mais eficiência, aproveitando os atalhos oferecidos por um editor de texto mais básico como o Emacs.

Instalei o Emacs e o plug-in ESS, tudo está funcionando corretamente e testei algum código, mas estou tendo dificuldades para me acostumar com ele e não encontrei um manual de referência adequado.

As pesquisas do Google retornam alguns sites muito antigos, com tutoriais que se concentram principalmente na instalação e configuração dos plug-ins, e o manual no site oficial é um pouco denso para mim.

Estou procurando uma introdução relativamente breve (idealmente com captura de tela e uma lista de teclas de atalho) projetada para alguém que esteja familiarizado com o R, mas não com o Emacs.

Todas as referências ou outras dicas sobre como começar serão muito apreciadas.

Vai
fonte

Respostas:

11

Primeiro, você precisará aprender texto básico operando com o emacs. Como o emacs é muito sofisticado, descobrir como simplesmente selecionar texto e cópia pode ser um desafio. Portanto, invista algum tempo para descobrir como fazer isso com eficiência. A leitura do manual pode ajudar. Para o Mac OS X, use o Aquamacs, ele suporta atalhos nativos.

Trabalhar com o ESS não difere de trabalhar com R. As mesmas regras para organizar o código devem ser aplicadas. No meu caso, todo projeto tem seu próprio diretório, que reside no diretório pai chamado R, que está no meu diretório inicial (no Windows, eu recomendo apontar o diretório home do emacs para o diretório em que reside toda a sua fonte). Então, quando eu uso o ESS para trabalhar no projeto, sempre faço M-x Re seleciono o diretório inicial do diretório do meu projeto.

Depois de iniciar o processo R, geralmente divido o emacs em duas janelas (terminologia do emacs). À esquerda, tenho um código-fonte, que envio ao processo R à direita. Os atalhos relevantes (esses são atalhos do emacs) são C-x 3para dividir janelas verticalmente, C-x 1para tornar o buffer atual a única janela e C-x 2para dividir janelas horizontalmente.

Ao enviar código para R, mantenho a distinção entre funções e instruções R. Eu faço isso mantendo todas as minhas funções em um arquivo normalmente chamado 10code.R. Então, posso simplesmente carregar esse arquivo usando a opção de carregamento do arquivo ESS (atalho C-c C-l). A vantagem dessa abordagem é que ela origina todas as funções e não produz nada no buffer R. Se houver um erro no seu código, o ESS mostrará uma mensagem no minibuffer e você poderá investigá-lo pressionando C-c`.

O outro código são as instruções R, que tento manter auto-explicativas: carregar dados, limpar dados, ajustar modelo estatístico, inspecionar os resultados, produzir os resultados finais. O código fonte para essas instruções é o status atual do projeto. A intenção é que, após a conclusão do projeto, a fonte dos arquivos com esse código reproduza o projeto (também uso o git para rastrear o histórico). Ao trabalhar com esse arquivo, normalmente trabalho apenas com uma instrução R, que envio ao processo R por meio da função eval, paragraph, statement command, que é o atalho C-c C-c. Este comando envia ao processo R o parágrafo, ou seja, o texto que é delimitado por novas linhas. Isso é útil, pois você pode agrupar instruções R em tarefas e enviar toda a tarefa para o processo R. Também não requer a seleção de texto, o que também é muito conveniente. O atalhoC-c C-c tem a vantagem de mover o cursor para a janela R, para que você possa inspecionar imediatamente os resultados da instrução R enviada.

Portanto, meu fluxo de trabalho básico está se movendo muito entre janelas e buffers. Para facilitar isso, use os seguintes atalhos no meu arquivo .emacs:

(define-key global-map [f1] 'Control-X-prefix)
(define-key global-map [f3] 'find-file)
(define-key global-map [f2] 'save-buffer)
(define-key global-map [f8] 'kill-buffer)
(define-key global-map [f5] 'switch-to-buffer)
(define-key global-map [f6] 'other-window)
(define-key global-map [f9] 'ess-load-file)

Eu raramente uso f1, mas todos os outros com muita frequência. Outras configurações ESS específicas que eu uso são as seguintes:

(setq comint-input-ring-size 1000)
(setq ess-indent-level 4)
(setq ess-arg-function-offset 4)
(setq ess-else-offset 4)

Isso instrui o ESS a aumentar a largura de 4 caracteres da guia (o padrão é 2), que é minha preferência pessoal, e expande o número de seus comandos emitidos que o ESS salva como histórico.

Para trabalhar diretamente com o processo R, achei os seguintes atalhos muito úteis:

(add-hook 'inferior-ess-mode-hook 
      '(lambda nil 
         (define-key inferior-ess-mode-map [\C-up] 'comint-previous-matching-input-from-input)
             (define-key inferior-ess-mode-map [\C-down] 'comint-next-matching-input-from-input)
        (define-key inferior-ess-mode-map [\C-x \t] 'comint-dynamic-complete-filename)
        )
)

Isso lembra a instrução R do seu histórico de instruções R, mas tenta combiná-la com a que já está na sua linha. Por exemplo, digitando plno processo R e pressionando \C-up(que é controle e a seta para cima) percorrerá todas as instruções que começam com pl, portanto, lembrará, por exemplo, todos os plot(...comandos.

A configuração final que eu uso com o ESS é a seguinte:

(setq ess-ask-about-transfile t)

Dessa forma, o ESS sempre pergunta onde salvar o texto no buffer com o processo R. Normalmente, numero esses arquivos de acordo com a data, portanto sempre tenho outra maneira de rastrear o que exatamente estava fazendo. A única ressalva dessa opção é que, por algum motivo, o ESS define o buffer R como somente leitura, depois de carregar o R. O atalho para tornar o buffer gravável é C-x C-q.

Portanto, essas são minhas configurações que eu uso para trabalhar com o ESS, me sinto feliz com elas e não sinto necessidade de adicionar nada por alguns anos. Ao apresentar o ESS para usuários iniciantes, geralmente dou essa visão geral.

Terminarei com o atalho final, que para mim é o atalho mais usado ao trabalhar com o Emacs e, em particular, com o ESS, C-gque fecha o comando no mini-buffer. Durante todos os anos em que trabalho com o Emacs e o ESS, ainda consigo invocar alguns comandos do Emacs que eu não queria, C-gsão muito úteis nessas situações.

mpiktas
fonte
Obrigado! Esta informação é muito útil, tentarei configurar minha instalação do Emacs de maneira semelhante. Em relação aos pontos específicos do sistema operacional, eu estou no Linux (Fedora 15), então não tenho certeza se isso faz alguma diferença na configuração / layout.
Will
Com o Fedora, você deve obter o emacs simples. Eu recomendaria instalar o ESS manualmente, em vez de usar a versão fornecida pelo Fedora, pois talvez ela seja muito antiga. Então, basicamente, verifique primeiro como o texto é manipulado e qual chave é meta. Eu suspeito M-w C-y C-wque funcionará como copiar, colar, cortar.
mpiktas 29/07
2

Dependendo de onde você está, isso pode não funcionar para você, mas encontrei alguém no corredor que o usou e incomodou-o com perguntas. Fique com ele, vale a pena!

Uma dica que achei especialmente útil foi usar o modo cua; faz com que o emacs compartilhe alguns dos atalhos de teclado mais comuns (como salvar, cortar, copiar etc.) com programas modernos. Também achei o modo retângulo muito mais fácil de usar no modo cua.

Aaron deixou Stack Overflow
fonte
2
Obrigado pela dica, ativei o modo CUA. Em relação à outra dica, uma das minhas motivações originais para aprender ESS era observar a rapidez com que um dos meus professores conseguia editar o código durante uma palestra. Estou longe do campus durante o verão, mas tentarei encontrar um "mentor" quando voltar.
Will