如何在发生错误后激活R任务回调函数

6
我希望您知道如何在错误后进行回调。
我尝试了这个方法,但无法处理错误:
addTaskCallback(
  function(expr, value, ok, visible) {
    print("ok")
    TRUE
  }
)
getTaskCallbackNames()

print(1) #ok 
ls() #ok
dont_exist() # the taskcallback isn't activated

编辑:

明白了!

if (!require(devtools)){install.packages("devtools")}
devtools::install_github("ThinkRstat/fcuk")
library(fcuk)
sl()
iri
view
mea

不使用 try 选项,可以这样做吗?test <- try(dont_exist());if(inherits(test, "try-error")) stop("stopping execution") - moodymudskipper
@Moody_Mudskipper 当然不是 ;) - Vincent Guyader
你可能会觉得这篇文章 this 以及这篇博客中的 Advanced Exception Handling 章节 this blog 很有趣。 - parth
1个回答

2

R提供了一些方法来添加错误和警告的处理程序。您可以使用类似以下的内容:

.Internal(.addCondHands("error", 
                        list(error = function(e) {print("ok")}), 
                        .GlobalEnv, NULL, TRUE))

为错误添加回调函数。我没有找到太多相关的文档,但是你可以查看withCallingHandlerstryCatch的源代码来了解如何使用它。

编辑:

我还发现一种方法可以在出现错误后有一个回调函数,但这不是纯粹的R方式。它依赖于Rstudio的错误回调机制:

如果您使用Rstudio,您会发现有一个全局选项“error”,它用作Rstudio的错误回调函数。通过getOption("error")可以查看它并像这样更改它:

f <- function(){
    print("ok")
}

options(error = f)

如果你想收集最近的错误信息,可以使用内置于R中的geterrmessage()函数。


有没有任何想法如何使这个指令持久化?对于第一个错误,它可以正常运行,但对于第二个错误则不行。问候。 - Vincent Guyader
@VincentGuyader 我明白了...我会去看看的...很抱歉我没有注意到这个问题。 - Consistency
@VincentGuyader 我找到了一些方法来设置错误回调,但这些方法依赖于Rstudio。请看一下我的编辑。我认为拥有一个纯R的方式更有用,但目前我还没有找到这样的方法,我会继续寻找。像这样拥有错误分析功能真的非常有用。请继续努力! - Consistency

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接