我需要一个代码尝试随机种子,直到获得所需的结果或达到最大尝试次数。这是一个人为的例子:函数smallr()
返回随机数< 0.2或错误消息。如果tryCatch
捕获错误,则使用不同的随机种子进行另一次尝试,并重复该过程直到达到最大尝试次数(此处为50)。
smallr <- function() {
r <- runif(1)
if (r >= 0.2)
stop("r >= 0.2")
r
}
i <- 1
set.seed(1)
r <- tryCatch(smallr(), error=function(e) NA)
while(is.na(r) & i <= 50) {
rm(.Random.seed)
r <- tryCatch(smallr(), error=function(e) NA)
i <- i + 1
}
r
是否可以在异常处理系统中执行相同的操作? (也许以特定方式使用tryCatch
函数本身?)
我的实际动机是拟合一系列复杂的回归模型,并通过改变随机种子来克服偶尔缺乏收敛。鉴于此过程是更大脚本的一部分,我宁愿尽可能简洁地保持代码。