我正在使用一个函数来处理9000个项目的某些数据。 有时,程序会在完成例如6000个项目后卡在那里。
在这种情况下,我将不得不使用RStudio中的红色小按钮手动停止程序,并从头开始重新运行。
我想知道,即使有一些方法,即使我手动停止程序,它仍然可以返回现有结果,因此我不必从头开始。
可能类似于tryCatch
,但是由于手动停止实际上不是错误,因此我不知道如何使用tryCatch
谢谢
答案 0 :(得分:0)
我认为最好的办法是弄清楚为什么您的程序被卡住并解决根本原因。
如果您发现“卡住”的原因不在您的控制范围之内,那么错误就是您的朋友。如果您可以检测到导致问题的情况,请使用{{ 1}}。
然后可以使用gapi.auth2.ExternallyVisibleError: Invalid cookiePolicy
在程序的其他位置进行提取。我还发现stop()
包的safely函数在这种情况下非常有用,因为您可以处理一堆容易出错的文件,然后决定如何优雅地处理打ic。我发现它通常会产生比tryCatch
更整洁的代码。
要考虑的其他一些策略:
交互式调试
如果有一种方法可以检测到程序被程序卡住,并且您不想重新处理代码以处理错误,则可以通过调用purrr
来启动交互式调试器,例如
tryCatch
然后您可以与环境交互并手动恢复执行。
存储进度
听起来函数正在处理项目,并可能产生输出。如果您可以随时将计算结果写到文件中或内存中的某个位置,则可以在代码中添加一个条件,以跳过已处理的项目。
例如,使用browser()
和if (stuck) {
browser()
}
之类的东西:
file.exists()
这样,当卡住程序后再次启动程序时,您就不会浪费时间重新处理项目。