Question

J'aime la combinaison Emacs ESS. J'aime envoyer des lignes, des fonctions, des régions et des tampons de code en ligne de commande pour une évaluation sans utiliser la souris.

Cependant, j'ai remarqué que la commande Eval Function dans Emacs est beaucoup plus lente que d'exécuter simplement source ("fns.R") , où fns.R est le fichier contenant la fonction que je veux évaluer.

Pourquoi est-ce le cas?

Était-ce utile?

La solution

Je pense que les utilisateurs de la liste ont de meilleures réponses pour vous. Mais si vous évaluez de manière invisible, le traitement est beaucoup plus rapide. Essayez de mettre ceci dans votre fichier .emacs:

(setq ess-eval-visibly-p nil)

Autres conseils

Je ne fais que deviner, mais quand vous dites

  • source ("fns.R") vous n'impliquez pas du tout Emacs / ESS et le temps de calcul est simplement le temps nécessaire à R pour extraire le fichier et le digérer. - probablement très peu, alors que

  • Eval Function passe une région à l'interpréteur Emacs qui doit l'envoyer (probablement ligne par ligne) au moteur R qui la digère ensuite de manière fragmentée.

et cela ralentirait la seconde approche.

Pourtant, dans le grand schéma des choses, qui s'en soucie? J'envoie souvent des tampons entiers ou de grandes régions, et cela prend peut-être une grande partie de la seconde? Je pense toujours - comme vous le dites - que la capacité de l’éditeur (riche) et du langage sous-jacent à interagir de cette manière est extrêmement puissante.

Félicitations aux pirates Emacs et à l’équipe ESS.

Si vous voulez exécuter tout votre tampon - si vous êtes sous Unix / Linux, vous pouvez aussi lancer votre script avec un shebang:

#!/usr/bin/Rscript

Et rendre votre fichier exécutable

chmod 744 myscript.r

(Je me souviens d'avoir lu que r souhaitait que leurs scripts se terminent par .R mais bon ...) et vous pouvez l'exécuter de cette façon:

./myscript.r

Et avec des arguments,

./myscript.r arg1 arg2

(que j'ai effectivement utilisé pour appeler une fonction R à partir d'un appel système Matlab) et dans votre fichier R, vous pouvez utiliser

userargs = tail(commandArgs(),2) 

pour obtenir arg1 et arg2. Vous pouvez aussi vous passer du shebang:

R --no-save < myscript.r arg1 arg2

et ainsi de suite. Avec Windows, je me souviens que c’était

R CMD BATCH myscript.r

ou quelque chose du genre ... J'ai remarqué un peu de retard lors de l'exécution de commandes via ESS (bien que j'aime beaucoup ESS chèrement ), donc quand je sais que je veux exécuter le tampon entier, je lance parfois un shell dans une fenêtre située sous le script R (où réside normalement le tampon R) et utilise les astuces ci-dessus.

Vous pouvez également utiliser

echo 'source("myscript.r")' | R --no-save

également - l'avantage de l'utilisation de ces méthodes par rapport à l'exécution de 'source ("myscript.r") directement dans R ou un tampon R est que vous démarrez avec un espace de travail vide (vous devez toutefois veiller à ce que votre .Rprofile ne sera chargé que si vous appelez explicitement "source (" ~ / .Rscript ") dans" myscript.r ") afin que vous puissiez être sûr que votre script est autonome (il appelle les bibliothèques appropriées, votre Les fonctions en largeur ne font pas référence à des variables non souhaitées dans l'espace global que vous avez oublié de supprimer, etc.).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top