gpt4 book ai didi

r - 使用 tryCatch() 捕捉引导循环

转载 作者:行者123 更新时间:2023-12-02 22:07:09 25 4
gpt4 key购买 nike

我对 tryCatch() 的使用了解不足,但发现在正在进行的讨论中很难找到好的解决方案。

我有一个自编程函数,它返回一个对象。它实际上是一个列表对象,但为简单起见,假设它是一个标量。我正在使用 for() 循环来引导这个函数。我的循环具有以下形式:

boot<-1000
for(i in 1:boot){
bootstrap_data<-data[sample(nrow(data),nrow(data),replace=T),]
out[i]<-myfunction(bootstrap_data,X,...)
}

myfunction() 有时会返回一条错误消息,因为它使用 lm() 在数据子集上拟合模型,然后从不同的数据集预测新数据子集。然后可能会发生某些因素,某些级别偶然不会出现在用于拟合的数据中,但它们确实会出现在预测子集中。这种情况确实很少发生(例如,大约每 15,000 次迭代),但确实会发生(我需要多次引导 myfunction())。

我想使用 tryCatch() 或类似的函数来捕获我的 Bootstrap 循环。此外,我想定义一个索引来计算循环 tryCatch() 必须捕获函数的频率。最后,我希望有一个常数 boot 而不管错误发生的次数。

R 返回以下消息:

    Error in model.frame.default(Terms,newdata,na.action=na.action,
xlev=object$xlevels) : factor X has new levels 2

Xlm() 中用户指定的预测器。我不确定 2 代表什么,我猜是新关卡的数量(?)。

最佳答案

这是一个有时会失败的函数

f <- function() {
r <- rnorm(1)
if (r > 1)
stop("oops")
r
}

我们分配一个结果向量并设置一个计数器来更新第i个元素

out <- numeric(100)
i <- 0

然后反复尝试调用函数。如果出现错误,我们不会增加 i 或记录结果,而是直接进入下一次迭代

while (i < length(out)) {
    tryCatch({
        out[[i + 1]] <- f()
        i <- i + 1
    }, error=function(...) NULL)
}

关于r - 使用 tryCatch() 捕捉引导循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15931219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com