Принудительно остановить или остановить при ошибке - PullRequest
9 голосов
/ 15 сентября 2009

Мне было интересно, знает ли кто-нибудь о хорошем способе заставить R или ESS прекратить выполнение остальной части кода после точки, в которой возникает ошибка, если я оцениваю область или буфер (я обнаружил только противоположное просьба в помощь архивам). Я искал в файлах справки R, но option(error=stop) остановит только выполнение нарушающей функции или оператора, но не тех, которые следуют за ним. Спасибо!

Ответы [ 3 ]

12 голосов
/ 16 ноября 2009

Если R / ESS тратит столько вычислительного времени, что ваш emacs / ESS не отвечает на C-c C-c, вы также можете сохранить его, отправив сигнал INTERRUPT с терминала.

Во-первых: определите идентификатор процесса R, используя top или ps. (мой был 98490 Затем: kill -2 98490 Это посылает сигнал прерывания, и вы возвращаете сеанс ESS / Emacs и R обратно

5 голосов
/ 26 сентября 2009

В соответствии с руководством ESS это должно работать: C-c C-c (comint-interrupt-subjob) Посылает сигнал Control-C процессу ESS.Это приводит к прерыванию текущей команды.

У Джона Фокса есть веб-сайт, на котором он предлагает конфигурацию для ESS.В нем у него есть эта функция:

(defun stop-R ()

"Interrupt R process in lower window."

(interactive)

(select-window win2)

(comint-interrupt-subjob)

(select-window win1))

Вы должны быть в состоянии добавить эту функцию в меню в XEmacs, используя:

(defun R-menu ()

  "Hook to install R menu and sub-menus"

  (add-menu-item '("ESS" "R") "Interrupt computation" 'stop-R
)
)
(add-hook 'ess-mode-hook 'R-menu)

Вы можете проверить остальные его настройкифайл и документация, чтобы увидеть, если это вас интересует.Я еще не пробовал это, но я надеюсь, что это работает для вас!

Чарли

2 голосов
/ 16 сентября 2009

? Перерыв

Только выводит вас из себя.

? Попробовать

Позволяет настроить код, который может завершиться с ошибкой и корректно восстановить.

...