Я написал сценарий, который должен остановить выполнение, если указанные данные неверны. Однако, хотя stop
создает сообщение об ошибке, сценарий просто продолжается. Минимальный пример:Как остановить/остановить/остановить скрипт в R?
if (TRUE) {stop("End of script?")} #It should stop here
print("Script did NOT end!") # but it doesn't, because this line is printed!
Консоль вывода:
> if (TRUE) {stop("End of script?")}
Error: End of script?
> print("Script did NOT end!")
[1] "Script did NOT end!"
>
Это на самом деле не удивительно, потому что от ?stop
:
stops execution of the current expression and executes an error action.
Так что только заканчивается ходячее выражение, а не сценарий. Я нашел here, что вы можете обернуть {} вокруг общего скрипта (или поместить его в функцию), но это кажется скорее обходным решением, чем решением. Конечно, это хорошая практика программирования, чтобы поймать ошибку и обработать их самостоятельно (см., Например, ссылку в комментарии от mra68), но я все равно хотел бы знать, могу ли я остановить скрипт в R.
У меня есть также пробовали return
и break
, но это работает только в функции или в цикле. Я искал другие возможные ключевые слова, такие как «halt» и «end», но не повезло. Я чувствую себя немного глупо, потому что это очень простой вопрос.
Итак, есть ли команда, которая может заставить мой скрипт останавливать/останавливать/заканчивать с фатальной ошибкой?
Я запускаю R 3.2.3 в Windows 8, но имел ту же проблему с R 3.0.1 на MAC-OSX.
> sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
locale:
[1] LC_COLLATE=Dutch_Netherlands.1252 LC_CTYPE=Dutch_Netherlands.1252 LC_MONETARY=Dutch_Netherlands.1252
[4] LC_NUMERIC=C LC_TIME=Dutch_Netherlands.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] tools_3.2.3
ТЕСТ НА MAC-OS, sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-apple-darwin10.8.0 (64-bit)
locale:
[1] nl_NL.UTF-8/nl_NL.UTF-8/nl_NL.UTF-8/C/nl_NL.UTF-8/nl_NL.UTF-8
Я предлагаю, вы помещаете любой код, который вы хотите запустить в функции затем вызвать эту функцию. Затем вы можете использовать 'stop', и он должен прервать функцию в этой точке. Оператор функции в r также может быть использован для объявления методов, подобных другим языкам программирования, которые, возможно, могут вводить в заблуждение. –
В моей системе (R версии 3.2.3, операционная система Windows 7) «stop» остановил сценарий. Если вы посмотрите на исходный код «stop», вы увидите, что его поведение зависит от некоторых внутренних функций, и они могут быть зависимыми от машины. – mra68
[Эта ссылка] (http://adv-r.had.co.nz/beyond-exception-handling.html) может быть полезна. Но если это так, вопрос вовсе не является основным. – mra68