我有一个R脚本,我必须'杀死'有时停止执行。但是在“杀死”它时,执行清理的代码(关闭连接等)不会被执行。 无论脚本如何停止,如何确保执行清理代码。
我的脚本是myTest.R:
print("script called")
Sys.sleep(20)
.Last<-function()
{
print("Last called")
}
我从命令行启动R脚本:
> Rscript myTest.R
如果我等待20秒,则调用.Last函数。
现在有时我必须通过调用来中断脚本的执行:
kill -USR1 pid
其中pid是进程ID。此调用记录在此处: http://stat.ethz.ch/R-manual/R-devel/library/base/html/Signals.html
这会终止进程,但不会调用.Last函数。但文档说它应该被调用。我在这里想念的是什么请帮忙。哦,我在Linux上运行它。
由于
答案 0 :(得分:0)
您将在?conditions
中找到错误处理的所有可能性。
一种可能是使用tryCatch
允许您使用已定义的表达式或值失败:
library(parallel)
cl <- makeCluster(2)
test <- function(x) {
2+x
e <- simpleError("test error")
stop(e)
}
# I do not stop the connection to the cluster in test()
tryCatch(test(2), finally = stopCluster(cl))
#but after failing a call to
stopCluster(cl) #gives,
Error in summary.connection(connection) : invalid connection
# because with tryCatch it fails with closing the connections
然而还有其他可能性,例如withRestart
,withCallingHandlers
...
答案 1 :(得分:-1)
在我们将中断发送给R之前,需要先定义.Last函数。所以它应该是:
print("script called")
.Last<-function()
{
print("Last called")
}
Sys.sleep(20)
现在工作正常。