捕获警告而不将其转换为错误

时间:2012-09-28 02:54:39

标签: r

我需要在不干扰混合操作的情况下捕获警告(在R中) 生成它们的模型。到目前为止,我已经看过两个变种。在 一个案例,发生导致模型坍塌的错误,我很高兴 能够在模型运行成功的情况下记录这些实例中的拟合对象并记录穿插的故障:

storOutcomes<-lapply(1:50, function(i)tryCatch(CustomlmerFnctn(Datasets[[i]]),
error=function(e) NULL )) 

在第二种情况下,我可以使用选项(warn = 2)将警告更改为错误并使用a 与上面的语法类似。但是,我看不出如何记录这两个装 对象和收敛状态,即至少出现两个警告,

“In mer_finalize (ans) : singular convergence (7)”

“In mer_finalize (ans) : false convergence (8)“

我希望能够将收敛状态链接到模型参数。 所以基本上我想知道如何捕获警告而不将其转换为 错误。我尝试了options(warn=1)suppressMessagessink(…, type(“output”,”message”))cat()语句的组合,生成了迭代/数据集ID 从模型函数,但这只将连续的ID写入文件,离开 标准输出上的警告。

1 个答案:

答案 0 :(得分:0)

很难从你复杂的例子中说出来,但也许

warn <- NULL
value <- withCallingHandlers({
    warning("oops")
    1 + 2
}, warning = function(w) {
    warn <<- append(warn, conditionMessage(w))
    invokeRestart("muffleWarning")
})

导致

> warn
[1] "oops"
> value
[1] 3

?withCallingHandlers及其附加文档demo(error.catching)也说明了这一点。 muffleWarning上提及了?warning