2010-12-04 30 views
2

Lorsque vous demandez à ESS d'évaluer les éléments suivants d'un tampon (Cc, Cb, ou similaire)-entrée utilisateur et ESS

par(ask=TRUE) 
plot(1,1) 
plot(2,1) 

L'interprète va dans une boucle infinie, car ESS démarre la session de R avec l'argument --no-readline. La boucle peut être rompue avec C-g, mais est-il possible de demander à l'interpréteur de demander l'entrée de l'utilisateur?

Répondre

0

(stratégies de Google se sont réunis et RSiteSearches):

Voyez-vous l'invite: « Retour a frappé » dans l'une de vos fenêtres de session? Si oui ... frapper.

Sinon, essayez de cliquer dans la fenêtre de tracé.

Et si cela échoue, vous devriez reprendre le contrôle avec c-G.

Edit: Une autre stratégie, certes pas résoudre le problème ESS-non-interactivité: Si vous voulez tenir pour l'entrée d'utilisateur, puis readlines peuvent être utilisés:

input=file("stdin") 
print(readLines(input,1)) 
+0

L'invite n'apparaît qu'après avoir appuyé sur c-G, et c-G ne sort pas seulement de la boucle en attente de saisie par l'utilisateur, elle arrête l'exécution du script restant. – fgregg

+1

Donc, juste pour être clair, une fenêtre de tracé apparaît et malgré le fait de cliquer dans la fenêtre pour obtenir le focus, vous ne voyez pas l'invite? –

+0

Vous avez raison.Le script comme je l'avais avant, avec juste une intrigue exécutée sans problème, quand j'ai commencé dans une session R propre. J'ai ajouté un deuxième tracé à la question initiale, de sorte que le problème que je décris soit reproductible. – fgregg

1

Une solution consiste à modifier ess-r-d.el et supprimer l'option codée en dur --no-runtime donnée à R, c'est la ligne 127 de la dernière mise en œuvre.

changement

(let* ((r-always-arg 
     (if (or ess-microsoft-p (eq system-type 'cygwin)) 
      "--ess " 
     "--no-readline ")) 

à

(let* ((r-always-arg 
     (if (or ess-microsoft-p (eq system-type 'cygwin)) 
      "--ess ")) 

S'il y a une version compilée, vous devez compiler le .el pour générer et remplacer le fichier .elc binaire.

Le fichier peut être (l'emplacement du répertoire dépend de votre OS)

  • dans le répertoire site-lisp. Editez le fichier .el dans emacs (^ X^F) puis faites M-x byte-compile-file pour générer le .elc. Si vous avez installé à partir de l'ensemble de la source zip/tar, dans le répertoire lisp

  • Dans ce cas, après le changement, effectuez un make suivi d'un make install.

Vous devez bien sûr avoir write accès aux fichiers .el et .elc.

Si vous ne vous sentez pas à l'aise avec la compilation du fichier .el, vous pouvez simplement le retirer (.elc) et utiliser la version .el (devrait être seulement une légère différence de performance).

+0

Bien dit. Et vous savez ce que les blowhards de stat.ethz.ch/mailman/listinfo/ess-help auraient dit si le PO leur avait demandé comment résoudre ce problème? Ils auraient dit "Vous ne devriez pas utiliser readline en premier lieu, la fonctionnalité intégrée ESS est meilleure, bla bla bla." Bien sûr, ils savent mieux que l'utilisateur ce qui est le mieux pour l'utilisateur. Merci de documenter ce patch, au lieu de donner des conférences à l'OP sur ce qu'il "devrait" faire. – f1r3br4nd