Vous devrez d'abord apprendre le texte de base fonctionnant avec emacs. Étant donné qu'emacs est très sophistiqué, il peut être difficile de sélectionner simplement le texte et la copie. Investissez donc un peu de temps pour découvrir comment le faire efficacement. La lecture du manuel peut aider. Pour Mac OS X, utilisez Aquamacs, il prend en charge les raccourcis natifs.
Travailler avec ESS ne diffère pas de travailler avec R. Les mêmes règles d'organisation du code devraient s'appliquer. Dans mon cas, chaque projet a son propre répertoire, qui réside dans le répertoire parent appelé R, qui se trouve dans mon répertoire personnel (pour Windows, je recommande de pointer le répertoire personnel emacs vers le répertoire où réside toute votre source). Donc, lorsque j'utilise ESS pour travailler sur le projet, je le fais toujours M-x R
et je sélectionne le répertoire de départ mon répertoire de projet.
Après avoir démarré le processus R, je divise généralement emacs en deux fenêtres (terminologie emacs). Ensuite, à gauche, j'ai un code source, que j'envoie au processus R à droite. Les raccourcis pertinents (ce sont des raccourcis emacs) permettent C-x 3
de fractionner les fenêtres verticalement, C-x 1
de faire du tampon courant la seule fenêtre et C-x 2
de fractionner les fenêtres horizontalement.
Lors de l'envoi de code à R, je garde la distinction entre les fonctions et les instructions R. Je le fais en gardant toutes mes fonctions dans un fichier habituellement appelé 10code.R
. Ensuite, je peux simplement charger ce fichier en utilisant l'option de chargement du fichier ESS (raccourci C-c C-l
). L'avantage de cette approche est qu'elle source toutes les fonctions et ne produit rien dans le tampon R. S'il y a une erreur dans votre code, ESS affiche un message dans le mini-tampon et vous pouvez le rechercher en appuyant sur C-c
`.
L'autre code est les instructions R, que j'essaie de garder explicites: charger les données, nettoyer les données, ajuster le modèle statistique, inspecter les résultats, produire les résultats finaux. Le code source de ces instructions est l'état actuel du projet. L'intention est qu'après la fin du projet, la recherche des fichiers avec ce code, reproduise le projet (j'utilise également git pour suivre l'historique). Lorsque je travaille avec ce fichier, je ne travaille généralement qu'avec une seule instruction R, que j'envoie au processus R via la fonction eval, paragraphe, commande d'instruction qui est un raccourci C-c C-c
. Cette commande envoie au processus R le paragraphe, c'est-à-dire le texte délimité par de nouvelles lignes. C'est pratique, car vous pouvez regrouper les instructions R en tâches et envoyer la tâche entière au processus R. Il ne nécessite pas non plus de sélection de texte, ce qui est également très pratique. Le raccourciC-c C-c
a l'avantage de déplacer le curseur vers la fenêtre R, de sorte que vous pouvez immédiatement inspecter les résultats de l'instruction R envoyée.
Donc, mon flux de travail de base se déplace beaucoup entre les fenêtres et les tampons. Pour faciliter cela, j'utilise les raccourcis suivants dans mon fichier .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)
J'utilise rarement f1
, mais tous les autres très fréquemment. Les autres paramètres ESS spécifiques que j'utilise sont les suivants:
(setq comint-input-ring-size 1000)
(setq ess-indent-level 4)
(setq ess-arg-function-offset 4)
(setq ess-else-offset 4)
Cela indique à ESS de créer un onglet de 4 caractères (la valeur par défaut est 2), ce qui est ma préférence personnelle, et augmente le nombre de commandes émises que ESS enregistre en tant qu'historique.
Pour travailler directement avec le processus R, j'ai trouvé les raccourcis suivants très utiles:
(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)
)
)
Cela rappelle l'instruction R de l'historique de votre instruction R, mais elle essaie de la faire correspondre avec celle qui est déjà sur votre ligne. Ainsi, par exemple, en tapant pl
dans le processus R et en appuyant sur \C-up
(c'est le contrôle et la flèche vers le haut), vous parcourrez toutes les instructions commençant par pl
, ainsi vous rappellerez par exemple toutes les plot(...
commandes.
Le paramètre final que j'utilise avec ESS est le suivant:
(setq ess-ask-about-transfile t)
De cette façon, ESS demande toujours où enregistrer le texte dans le tampon avec le processus R. Je numérote généralement ces fichiers en fonction de la date, j'ai donc toujours une autre façon de suivre exactement ce que je faisais. La seule mise en garde de cette option est que, pour une raison quelconque, ESS définit le tampon R en lecture seule, après le chargement du R. Le raccourci pour rendre le tampon accessible en écriture est C-x C-q
.
Ce sont donc mes paramètres que j'utilise pour travailler avec ESS, je suis content avec eux et je n'ai pas ressenti le besoin d'ajouter quoi que ce soit depuis quelques années déjà. Lors de la présentation d'ESS aux nouveaux utilisateurs, je donne généralement cet aperçu.
Je terminerai avec le raccourci final qui est pour moi le raccourci le plus utilisé lorsque l'on travaille avec Emacs et avec ESS en particulier C-g
qui quitte la commande dans le mini-tampon. Pendant toutes les années que je travaille avec Emacs et ESS, je parviens toujours à invoquer une commande Emacs dont je ne voulais pas, qui C-g
est très utile dans ces situations.