如何避免停止遇到错误的独立r脚本的执行?

时间:2014-01-29 21:33:43

标签: r error-handling

我正在运行我在多语言框架中编写的优化程序。因为我依靠不同的语言来完成任务,所以一切都必须是独立的,因此它可以通过批处理文件启动。一切都已经好了2-3个月,但是当这个过程的一个关键部分(通过一个独立的R脚本执行)遇到一些新的东西并给我一个错误信息时,我终于运气不好了。尽管我付出了最大的努力,但是这条错误消息使得所有事情都停止了:

    selMEM<-forward.sel(muskfreq, musk.MEM, adjR2thresh=adjR2)
    Procedure stopped (adjR2thresh criteria) adjR2cum = 0.000000 with 0 variables (superior to -0.005810)
    Error in forward.sel(muskfreq, musk.MEM, adjR2thresh = adjR2) : 
    No variables selected. Please change your parameters.

我知道为什么我收到这条消息:它警告我没有变量高于我在前向选择期间编程保留的阈值。虽然这不会在数百次运行中发生,但这并不是什么大问题,我只需要告诉R下一步该做什么。这是我迷失的地方。在对几个帖子(such as here)进行详尽搜索之后,尝试使用try()和tryCatch()接缝。所以我尝试了以下内容:

selMEM<-try(forward.sel(muskfreq, musk.MEM, adjR2thresh=adjR2))

   if(inherits(selMEM, "try-error")) {
        max<-0
        cumR2<-0
        adjR2<-0
        pvalue<-NA
    } else {
        max<-dim(selMEM)[1]
        cumR2<-selMEM$R2Cum[max]
        adjR2<-selMEM$AdjR2Cum[max]
        pvalue<-selMEM$pval[max]
    }

如果我在R中逐行执行问题行之后的代码是完美的,但是当我从命令提示符执行它作为独立脚本时,我仍然得到相同的错误消息并且我的整个过程突然停止在它执行后面的内容之前。

有关如何使这项工作的任何建议?

2 个答案:

答案 0 :(得分:3)

请注意try帮助:

  

try是使用tryCatch实现的;用于编程,而不是   try(expr, silent = TRUE),类似tryCatch(expr, error = function(e) e)(或其他简单的错误处理函数)可能更多   高效灵活。

tryCatch,可能:

selMEM  <- tryCatch({
    forward.sel(muskfreq, musk.MEM, adjR2thresh=adjR2)
}, error = function(e) {
    message(e)
    return(NULL)
})

if(is.null(selMEM)) {
    max<-0
    cumR2<-0
    adjR2<-0
    pvalue<-NA
} else {
    max<-dim(selMEM)[1]
    cumR2<-selMEM$R2Cum[max]
    adjR2<-selMEM$AdjR2Cum[max]
    pvalue<-selMEM$pval[max]
}

答案 1 :(得分:0)

您是否尝试在Try函数中将silent参数设置为true?

max<-0
cumR2<-0
adjR2<-0
pvalue<-NA

try({
    selMEM <- forward.sel(muskfreq, musk.MEM, adjR2thresh=adjR2)
    max<-dim(selMEM)[1]
    cumR2<-selMEM$R2Cum[max]
    adjR2<-selMEM$AdjR2Cum[max]
    pvalue<-selMEM$pval[max]
}, silent=T)