如何"测试"一个函数并重复它,如果没有执行?在R

use*_*441 1 loops r function

我必须在元素列表上运行一个函数(在R中).该函数通过最大似然估计模型的参数.要运行该函数,我需要给出一组初始参数值,然后由算法优化.

那么这是我的问题:

我想在每次对列表的每个元素执行函数时随机化初始参数值.我用函数runif()来做.但是,并非所有初始参数的组合似乎都有效(它会产生错误).在这种情况下,我想一次又一次地执行列表中该元素的函数,尝试不同的起始值,直到我得到使函数工作的初始参数值的组合.只有这样循环才能继续到列表的下一个元素.

你能否告诉我一些如何解决这个问题的想法?

非常感谢提前.

蒂娜.

Rei*_*son 5

tryor中包装生成错误的调用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
}
Run Code Online (Sandbox Code Playgroud)

或使用 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
}
Run Code Online (Sandbox Code Playgroud)

您需要根据需要安排out所需的长度或对象类型来保存结果,以及是否需要记录功能是否失败(如上例所示NA)将取决于您的内容是做.如果没有一个明确的例子,那就是你得到的最好的.

阅读?try并看一下?tryCatch,后者是一种更常用的陷阱错误机制.try本身是使用tryCatch例如......