1

我正在使用boot引导优化函数来估计标准误差。不幸的是,在极少数情况下,优化函数会返回一个错误,从而停止该boot函数。该错误对估计并不重要,我想跳过该迭代并继续下一个。

我试图找到一个解决方案,trytryCatch都无法正确使用。在将优化功能包装在其中时,statistic我设法跳过了错误。但是,这会导致估计的次数boot小于初始迭代次数并返回错误。

我的代码的基本示例如下

任何帮助表示赞赏,谢谢

bootfun = function(bootdata, i, d, C1) {
    C1 = cov (bootdata[i])
    ans =  constrOptim(...) #This function returns an error
    return(ans$par [d])
}
bootres = boot(bootdata, statistic = bootfun, 500)

编辑:我已经设法为我的问题找到一个可接受的解决方案。但是,如果一个函数经常出错,这可能是不可接受的,因为每个错误都会用 NA 替换引导复制。

bootfun = function(bootdata, i, d, C1) {
C1 = cov(bootresid[i])
tryCatch({
ans =  constrOptim(...)
return(ans$par[1:18] [d])  }, 
error=function(err) {rep(NA,18)} )
}
4

1 回答 1

1

这不是您的特定代码的答案,而是tryCatch您描述的情况的更一般的演示。如果您只想删除导致错误的条目,请让函数在错误时不返回任何内容,然后NULL从结果中删除值:

testfun <- function(i) {
tryCatch({
d <- rbinom(1,1,.3) # generate an error 30% of the time
if(d==1)
    error("test stop")
else
    return(1:10) # return your actual values
}, 
error = function(err) {return()} # return NULL on error
    )
}

x <- sapply(1:20, FUN=testfun) # run demo 20 times
x <- x[-(which(sapply(x,is.null),arr.ind=TRUE))]
# when errors happen, x is shorter than 20

最后一行NULL从列表中删除条目(基于此:https ://stackoverflow.com/a/3336726/2338862 )。

于 2013-06-11T09:20:20.347 回答