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

时间:2013-03-19 17:44:37

标签: r function loops

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

然后这是我的问题:

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

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

非常感谢。

蒂娜。

1 个答案:

答案 0 :(得分:5)

trytryCatch中包含产生错误的电话。

在伪代码中:

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实现的,例如......