1

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

然后这是我的问题:

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

你能否给我一些关于如何解决这个问题的想法?

非常感谢提前。

蒂娜。

4

1 回答 1

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
}

或使用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例如实现的......

于 2013-03-19T18:02:55.303 回答