Как я могу справиться с процессом R в ESS / Emacs? - PullRequest
26 голосов
/ 05 мая 2010

Я часто запускаю длинные R-скрипты, когда запускаю свою R-среду. Я хотел бы иметь возможность загрузить / запустить скрипт R в Emacs / ESS и продолжить другую работу в другом буфере.

Когда я нажимаю C-g или C-c C-c, процесс прерывается, и я должен перезапустить сценарий.

Как лучше всего справиться с процессом R в ESS / Emacs?

РЕДАКТИРОВАТЬ: Спасибо за ваши ответы и комментарии, но ни один из них не учитывает тот факт, что Emacs зависает при загрузке / запуске большого скрипта, и вы не можете изменить буфер.

Полагаю, мой вопрос немного более общий - может ли Emacs создать процесс, который позволит вам продолжать работать?

Ответы [ 3 ]

19 голосов
/ 22 января 2011

ESS запускает R как асинхронный процесс. Вам не нужно ничего фонового. Вы можете запустить свой код в течение нескольких часов и по-прежнему работать в ESS без перерыва.

Ваша проблема, похоже, в чем-то другом. Когда вы выполняете свой скрипт, вы делаете это «визуально», т. Е. Ваш исполняемый код выводится на терминал. Это приводит к зависанию Emacs.

Установите ess-eval-visibly на ноль, и огромные куски кода будут немедленно отправлены в R:

(setq ess-eval-visibly nil)

Приветствие.

[обновление]

В последних версиях ESS есть новая настройка ess-eval-visibply - nowait. Он помещает ваш код в нижний буфер и затем отправляет его в подпроцесс. Таким образом, вы можете увидеть свой код и весь вывод, не дожидаясь завершения подпроцесса.

[/ обновление]

3 голосов
/ 05 мая 2010

M-x R начнет сеанс R (имя буфера по умолчанию - *R*). Если вы снова нажмете M-x R, будет запущен второй сеанс R (с именем буфера *R:2*).

Каждый сеанс имеет свой собственный процесс R, так что вы можете запустить длинный R-скрипт в одном и при этом использовать другой независимо.

Нажатие C-x C-b вызывает список буферов, который позволит вам переключаться между сеансами R.

Или, если поставить

(global-set-key "\C-cr" 'ess-request-a-process)

в вашем файле инициализации .emacs, затем каждый раз, когда вы нажимаете C-c r, вам будет предложено выбрать сеанс R (буфер), на который вы хотите переключиться. Если у вас есть только один сеанс, он переключится туда автоматически.

0 голосов
/ 06 мая 2010

По моему личному опыту, ESS не очень хорош в обработке очень больших сценариев, так как иногда остальная часть Emacs становится непригодной для использования. Возможно, вам лучше заняться разработкой в ​​ESS, чем запускать полный скрипт в режиме BATCH.

...