Как я могу создать процесс R в ESS/Emacs?
Я часто запускаю длинные сценарии R при запуске среды R. Я хотел бы иметь возможность загрузить/запустить R script в Emacs/ESS и продолжить работу в другом буфере.
Когда я нажимаю C-g или C-c C-c, процесс прерывается, и я должен перезапустить script.
Каков наилучший способ фонового процесса R в ESS/Emacs?
EDIT: Спасибо за ваши ответы и комментарии, но никто из них не говорит о том, что Emacs зависает при загрузке/запуске большого script, и вы не можете изменить буфер.
Я полагаю, что мой вопрос немного более общий - может ли Emacs создать процесс, позволяющий вам продолжать работать?
Ответы
Ответ 1
ESS запускает R как асинхронный процесс. Вам не нужно ничего фона. Вы можете запускать свой код часами и работать в ESS без перерыва.
Ваша проблема кажется чем-то другим. Когда вы выполняете свой script, вы делаете это "видимо", т.е. Ваш исполняемый код печатается на терминале. Это вызывает зависание Emacs.
Установите ess-eval-visibly
на нуль, и огромные куски кода будут немедленно отправлены в R:
(setq ess-eval-visibly nil)
Приветствия.
[обновление]
В последних версиях ESS есть новая настройка для ess-eval-visibply
- nowait. Он помещает ваш код в нижний буфер и затем отправляет его в подпроцесс. Таким образом вы можете видеть свой код и весь вывод после этого, не дожидаясь завершения подпроцесса.
[/обновление]
Ответ 2
M-x R
запустит сеанс R (имя буфера по умолчанию - *R*
). Если ваше нажатие M-x R
снова, будет запущен второй сеанс R (с именем буфера *R:2*
).
Каждый сеанс имеет свой собственный процесс R, поэтому вы можете запускать длинный R script в одном и все равно использовать другой самостоятельно.
Нажатие C-x C-b
вызывает список буферов, который позволит вам переключаться между сеансами R.
Или, если вы поместите
(global-set-key "\C-cr" 'ess-request-a-process)
в вашем файле инициализации .emacs
, то каждый раз, когда вы нажимаете C-c r
, вам будет предложено указать, для какого R сеанса (буфера) вы хотите переключиться. Если у вас есть только один сеанс, он автоматически переключится туда.
Ответ 3
В моем личном опыте ESS не очень хорошо справляется с очень большими сценариями, в то время как остальная часть Emacs становится непригодной. Возможно, вам лучше начать разработку в ESS, а затем запустить полный script в режиме BATCH.