我写了一个R脚本,它将消息(进度报告)写入文本文件。我修改了error
选项,以便在发生错误时,错误消息也会写入该文件:
options(error = function() {
cat(geterrmessage(),file = normalizePath("logs/messages.txt"),append = TRUE)
stop()
})
它可以工作,但是当发生错误时我在控制台/终端窗口中收到此消息:
Error during wrapup:
Execution halted
所以我认为有一种更好的方法来中断脚本的执行......还是在那里?
答案 0 :(得分:6)
我刚在R源代码中找到了这个:
if (inError) {
/* fail-safe handler for recursive errors */
if(inError == 3) {
/* Can REprintf generate an error? If so we should guard for it */
REprintf(_("Error during wrapup: "));
/* this does NOT try to print the call since that could
cause a cascade of error calls */
Rvsnprintf(errbuf, sizeof(errbuf), format, ap);
REprintf("%s\n", errbuf);
}
stop()
导致错误处理程序被执行。如果在错误处理程序中发生stop()
调用,则R会显示Error during wrapup:
消息,并阻止您进行无限递归,否则会发生。
请勿在{{1}}内致电stop()
。
使用options$error
代替,它应该完全执行默认错误处理程序为非交互式使用所做的事情。有关错误处理的详细信息,请参阅q(save="no", status=1, runLast=FALSE)
了解?options
和options$error
的含义。