我写了一个脚本,如果提供的数据不正确,应该停止执行。然而,尽管
这并不奇怪,因为从
停止当前表达式的执行并执行错误操作。
所以它只结束当前表达式,而不是整个脚本。我在这里发现你可以将{}包裹整个脚本(或者将其放入函数中),但这似乎更像是一个变通方法而不是解决方案。当然,捕获错误并自行处理是良好的编程实践(例如mra68评论中的链接),但我仍然想知道是否可以停止R脚本。
我还尝试了
stop
会产生错误消息,但脚本仍然继续执行。以下是一个最简示例: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
可以看出:停止当前表达式的执行并执行错误操作。
所以它只结束当前表达式,而不是整个脚本。我在这里发现你可以将{}包裹整个脚本(或者将其放入函数中),但这似乎更像是一个变通方法而不是解决方案。当然,捕获错误并自行处理是良好的编程实践(例如mra68评论中的链接),但我仍然想知道是否可以停止R脚本。
我还尝试了
return
和break
,但这仅适用于函数或循环。我搜索了其他可能的关键字,如“halt”和“end”,但没有找到合适的。我感觉有点愚蠢,因为这似乎是一个非常基本的问题。
那么,是否有命令可以使我的R脚本终止/停止/结束,并产生致命错误?
我在Windows 8上运行R 3.2.3,但在MAC-OSX上使用R 3.0.1时也遇到了同样的问题。> 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 中,函数语句也可用于声明方法,就像其他编程语言一样,这可能会产生误导。 - vanao veneriq()
会发生什么?在我的系统上,它会中断整个 R 会话。也许把你的sessionInfo()
放到问题里面。 - mra68if (TRUE) {.Internal(.dfltStop("End of script?", TRUE))}
来停止脚本。也许你有一个不同的内部函数.dfltStop
。 - mra68