Quelles sont les bonnes références / conseils pour apprendre les statistiques d'Emacs Speaks (avec R)?

9

J'utilise R depuis plusieurs années, mais j'ai toujours utilisé une interface graphique comme Tinn-R, JGR et plus récemment R-Studio.

Bien que j'aime l'interface de R-Studio, je pense que pour les programmes plus longs avec peu / pas de graphiques, je pourrais coder plus efficacement en profitant des raccourcis offerts par un éditeur de texte plus basique comme Emacs.

J'ai installé Emacs et le plugin ESS, tout fonctionne correctement et j'ai testé du code, mais j'ai du mal à m'y habituer et je n'ai pas trouvé de manuel de référence adapté.

Les recherches Google renvoient quelques sites Web très datés avec des tutoriels qui se concentrent principalement sur l'installation et la configuration des plugins et le manuel sur le site officiel est un peu trop dense pour moi.

Je recherche une introduction relativement brève (idéalement avec une capture d'écran et une liste de raccourcis clavier) conçue pour quelqu'un qui connaît R, mais pas Emacs.

Toutes les références ou autres conseils pour commencer seraient grandement appréciés.

Volonté
la source

Réponses:

11

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 Ret 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 3de fractionner les fenêtres verticalement, C-x 1de faire du tampon courant la seule fenêtre et C-x 2de 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 pldans 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-gqui 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-gest très utile dans ces situations.

mpiktas
la source
Merci! Ces informations sont très utiles, je vais essayer de configurer ma configuration Emacs de manière similaire. En ce qui concerne les points spécifiques au système d'exploitation, je suis sous Linux (Fedora 15), donc je ne sais pas si cela fait une différence dans la configuration / mise en page.
Will
Avec Fedora, vous devriez obtenir les emacs simples. Je recommanderais d'installer ESS à la main au lieu d'utiliser la version fournie par Fedora, car c'est peut-être trop ancien. Donc, vérifiez d'abord comment le texte est manipulé et quelle clé est méta. Je suppose que M-w C-y C-wcela fonctionnera comme copier, coller, couper.
mpiktas
2

Selon l'endroit où vous vous trouvez, cela peut ne pas fonctionner pour vous, mais j'ai trouvé quelqu'un dans le couloir qui l'a utilisé et l'a harcelé avec des questions. Restez avec, ça vaut le coup!

Une astuce que j'ai trouvée particulièrement utile était d'utiliser le mode cua; il permet à emacs de partager certains des raccourcis clavier les plus courants (comme enregistrer, couper, copier, etc.) avec des programmes modernes. J'ai également trouvé le mode rectangle beaucoup plus facile à utiliser en mode cua.

Aaron a laissé Stack Overflow
la source
2
Merci pour l'astuce, j'ai activé le mode CUA. En ce qui concerne l'autre astuce, une de mes motivations originales pour apprendre l'ESS était de regarder à quelle vitesse un de mes professeurs pouvait éditer du code pendant une conférence. Je suis absent du campus pour l'été, mais j'essaierai de trouver un "mentor" à mon retour.
Will