Quali sono alcuni buoni riferimenti / consigli per l'apprendimento di Emacs Speaks Statistics (con R)?


9

Uso R da diversi anni, ma ho sempre usato una GUI come Tinn-R, JGR e, di recente, R-Studio.

Sebbene mi piaccia l'interfaccia di R-Studio, ritengo che per programmi più lunghi con poca / nessuna grafica, potrei programmare in modo più efficiente sfruttando le scorciatoie offerte da un editor di testo più semplice come Emacs.

Ho installato Emacs e il plug-in ESS, tutto funziona correttamente e ho provato un po 'di codice, ma ho difficoltà a abituarmi e non ho trovato un manuale di riferimento adatto.

Le ricerche di Google restituiscono alcuni siti Web molto datati con tutorial che si concentrano principalmente sull'installazione e sulla configurazione dei plug-in e il manuale sul sito Web ufficiale è un po 'troppo denso per me.

Sto cercando un'introduzione relativamente breve, (idealmente con screenshot e un elenco di tasti di scelta rapida) progettata per qualcuno che abbia familiarità con R, ma non con Emacs.

Eventuali riferimenti o altri suggerimenti per iniziare sarebbero molto apprezzati.

Risposte:


11

Per prima cosa dovrai imparare il testo di base operando con emacs. Poiché emacs è molto sofisticato, scoprire come selezionare semplicemente testo e copia potrebbe essere una sfida. Quindi investi un po 'di tempo a scoprire come farlo in modo efficiente. La lettura del manuale potrebbe essere d'aiuto. Per Mac OS X usa Aquamacs, supporta le scorciatoie native.

Lavorare con ESS non differisce dal lavorare con R. Dovrebbero essere applicate le stesse regole per l'organizzazione del codice. Nel mio caso, ogni progetto ha una sua directory, che si trova nella directory principale chiamata R, che si trova nella mia directory home (per Windows, consiglio di indirizzare la directory home di emacs nella directory in cui risiede tutta la sorgente). Quindi, quando utilizzo ESS per lavorare sul progetto, lo faccio sempre M-x Re seleziono la directory iniziale della directory del mio progetto.

Dopo aver avviato il processo R, di solito divido emacs in due finestre (terminologia di emacs). Quindi a sinistra ho un codice sorgente, che invio al processo R a destra. Le scorciatoie rilevanti (queste sono le scorciatoie di emacs) servono C-x 3per dividere le finestre verticalmente, C-x 1per rendere l'attuale buffer l'unica finestra e C-x 2per dividere le finestre in orizzontale.

Quando invio il codice a R, mantengo una distinzione tra funzioni e istruzioni R. Lo faccio mantenendo tutte le mie funzioni in un file chiamato di solito 10code.R. Quindi posso semplicemente caricare questo file usando l'opzione Carica file ESS (collegamento C-c C-l). Il vantaggio di questo approccio è che genera tutte le funzioni e non produce nulla nel buffer R. Se c'è un errore nel tuo codice, ESS mostra un messaggio nel minibuffer e puoi investigarlo premendo C-c`.

L'altro codice sono le dichiarazioni R, che cerco di mantenere autoesplicative: caricare i dati, pulire i dati, adattare il modello statistico, ispezionare i risultati, produrre i risultati finali. Il codice sorgente per queste affermazioni è lo stato corrente del progetto. L'intenzione è che dopo che il progetto è finito, approvvigionando i file con questo codice, riproduca il progetto (uso anche git per tracciare la cronologia). Quando lavoro con questo file, di solito lavoro solo con un'istruzione R, che invio al processo R tramite la funzione eval, il paragrafo, il comando statement quale scorciatoia è C-c C-c. Questo comando invia a R elaborare il paragrafo, ovvero il testo che è delimitato da nuove righe. Ciò è utile, poiché è possibile raggruppare le istruzioni R in attività e inviare l'intera attività al processo R. Inoltre non richiede la selezione del testo, che è anche molto conveniente. La scorciatoiaC-c C-c ha il vantaggio di spostare il cursore sulla finestra R, in modo da poter immediatamente ispezionare i risultati dell'istruzione R inviata.

Quindi il mio flusso di lavoro di base si sta spostando molto tra finestre e buffer. Per facilitare questo utilizzo le seguenti scorciatoie nel mio file .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)

Uso raramente f1, ma tutti gli altri molto frequentemente. Altre impostazioni ESS specifiche che utilizzo sono le seguenti:

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

Questo dice a ESS di allargare la linguetta di 4 caratteri (il valore predefinito è 2), che è la mia preferenza personale, ed espande il numero dei comandi emessi salvati da ESS come cronologia.

Per lavorare direttamente con il processo R ho trovato molto utili le seguenti scorciatoie:

(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)
        )
)

Questo richiama l'istruzione R dalla cronologia dell'istruzione R, ma tenta di abbinarla a quella già presente sulla riga. Quindi, ad esempio, digitando il plprocesso R e premendo \C-up(che è il controllo e la freccia su), scorrerai tutte le istruzioni che iniziano con pl, così ricorderai per esempio tutti i plot(...comandi.

L'impostazione finale che utilizzo con ESS è la seguente:

(setq ess-ask-about-transfile t)

In questo modo ESS chiede sempre dove salvare il testo nel buffer con il processo R. Di solito numero questi file in base alla data, quindi ho sempre un altro modo per tenere traccia di cosa stavo facendo esattamente. L'unica avvertenza di questa opzione è che per qualche motivo ESS imposta il buffer R in sola lettura, dopo aver caricato R. Il collegamento per rendere il buffer scrivibile è C-x C-q.

Quindi queste sono le mie impostazioni che utilizzo per lavorare con ESS, mi sento felice con loro e non sento la necessità di aggiungere qualcosa già da qualche anno. Quando introduco ESS agli utenti alle prime armi, di solito fornisco questa panoramica.

Concluderò con la scorciatoia finale che per me è la scorciatoia più usata quando lavoro con Emacs e con ESS in particolare è C-gche chiude il comando nel mini-buffer. Durante tutti gli anni in cui lavoro con Emacs ed ESS riesco ancora a invocare alcuni comandi Emacs che non volevo, C-gè molto utile in queste situazioni.


Grazie! Questa informazione è molto utile, proverò a configurare la mia configurazione di Emacs in modo simile. Per quanto riguarda i punti specifici del sistema operativo, sono su Linux (Fedora 15), quindi non sono sicuro che ciò faccia differenza nella configurazione / layout.
Will

Con Fedora dovresti ottenere i semplici emacs. Consiglierei di installare ESS a mano invece di usare la versione fornita da Fedora, dal momento che forse è troppo vecchia. Quindi, in sostanza, prima controlla come viene manipolato il testo e quale chiave è meta. Sospetto M-w C-y C-wche funzionerà come copia, incolla, taglia.
mpiktas,

2

A seconda di dove ti trovi, questo potrebbe non funzionare per te, ma ho trovato qualcuno nel corridoio che lo ha usato e li ha infastiditi con domande. Resta fedele, ne vale la pena!

Un suggerimento che ho trovato particolarmente utile è stato l'uso della modalità cua; fa emacs condividere alcune delle scorciatoie da tastiera più comuni (come salvare, tagliare, copiare, ecc.) con i programmi moderni. Ho anche trovato la modalità rettangolo molto più facile da usare in modalità cua.


2
Grazie per la punta, ho abilitato la modalità CUA. Per quanto riguarda l'altro suggerimento, una delle mie motivazioni originali per l'apprendimento di ESS era guardare quanto velocemente uno dei miei professori poteva modificare il codice durante una lezione. Sono lontano dal campus per l'estate, ma cercherò di trovare un "mentore" al mio ritorno.
Will
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.