Мне было интересно, если бы кто-нибудь знал о хорошем способе заставить R или ESS прекратить выполнение остальной части кода за пределами точки, в которой возникает ошибка, если я оцениваю регион или буфер (I «В архивах справки вы нашли обратную просьбу). Я искал в файлах справки R, но option(error=stop)
остановит выполнение функции или заявления о нарушении, но не те, которые следуют за ним. Благодаря!Сила остановки или остановки при ошибке
ответ
? Break
Только вы выходите из цепи.
? Попробовать
Позволяет настроить код, который может потерпеть неудачу и изящно восстановиться.
According to the ESS manual, это должно работать: C-c C-c
(Comint-прерывание-подзадание) Посылает Control-C
сигнал процессу ESS. Это приводит к отмене текущей команды.
John Fox имеет сайт, на котором он предлагает конфигурацию для 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)
Вы можете проверить остальную часть его файл конфигурации и документации посмотрите, интересует ли он вас. Я еще не пробовал, но надеюсь, что это сработает для вас!
Чарли
Спасибо Charlie - Я знаком с Cc Cc, но это для ручного останавливая процесс в процессе, независимо от ошибок (как я понимаю). Я могу изучить модификацию eval-region или eval-buffer для вызова этой функции при возникновении ошибки ... – hatmatrix
Если R/ESS коробления так много времени вычислений, что ваши Emacs/ESS не реагирует на C-C C-C, вы можете сохранить его, посылая сигнал прерывания от терминала.
Во-первых: вычислить R-идентификатор процесса с использованием top
или ps
. (У меня было 98490 Тогда: kill -2 98490
Это посылает сигнал прерывания, и вы получите ваш ESS/Emacs и R сеанс назад
Спасибо, но при работе в интерактивном режиме, я не хочу, чтобы обернуть строку или область в попытке() или tryCatch() каждый раз, но я полагаю, что это технически это сделало бы ... – hatmatrix
Привет crippledlambda. Вы нашли решение для своей проблемы в то же время? – giordano