我必须在元素列表上运行一个函数(在R中)。该函数通过最大似然估计模型的参数。要运行该函数,我需要给出一组初始参数值,然后由算法优化。
然后这是我的问题:
每次在列表的每个元素上执行函数时,我想随机化初始参数值。我用函数runif()来做。但是,并非所有初始参数的组合似乎都有效(它会产生错误)。在这种情况下,我想一次又一次地执行列表中该元素的函数,尝试不同的起始值,直到我得到使函数工作的初始参数值的组合。只有这样循环才能继续到列表的下一个元素。
你能否告诉我一些如何解决这个问题的想法?
非常感谢。
蒂娜。
答案 0 :(得分:5)
在try
或tryCatch
中包含产生错误的电话。
在伪代码中:
out <- vector(mode = "list", length = 10)
for (i in seq_along(out)) {
res <- try(...function call here...)
## res contains the actual error msg in object of class "try-error"
while(inherits(res, "try-error")) {
res <- try(...function call here...)
}
out[[i]] <- res
}
或使用repeat
out <- vector(mode = "list", length = 10)
for (i in seq_along(out)) {
repreat {
res <- try(...function call here...)
if(!inherits(res, "try-error"))
break
}
out[[i]] <- res
}
您需要根据需要安排 out
作为保存结果所需的对象长度或类型,以及是否需要记录函数是否失败(作为示例)以上与NA
)的关系取决于你在做什么。如果没有一个明确的例子,那就是你得到的最好的。
阅读?try
并查看?tryCatch
,后者是陷阱错误的更通用机制。 try
本身是使用tryCatch
实现的,例如......