【问题标题】:Repeatedly running a function in r till an error is not produced.在 r 中重复运行一个函数,直到不产生错误。
【发布时间】:2016-07-18 20:46:27
【问题描述】:

很抱歉,我无法从一开始就告诉您这些功能是什么。

我有一个函数CheckOutCell。它需要一个参数,即数字764。所以每次我运行这个函数时,它看起来都是这样的:CheckOutCell(764)

现在很多时候这个函数会给我一个错误:

Error in checkInCell(764) : 
The function is currently locked;  try again in a minute.

这是自定义错误消息,详细信息对这个问题并不重要。

现在这个功能可以在 30 秒到一个小时内锁定。我希望能够自动运行 CheckOutCell(764) 直到它通过,然后停止运行它。也就是说,运行它直到我没有收到错误,然后停止。

我认为开始会使用

while(capture.output(checkInCell(764)) == "Error in checkInCell(764) : 
The function is currently locked;  try again in a minute."){
do something}

然而这只会产生

Error in checkInCell(764) : 
The function is currently locked;  try again in a minute.

因为函数仍然被锁定,所以无法捕获任何输出。

我将如何测试while(error = T)

假设函数的源代码不能修改。

即使is.error(CheckInCell(764)) 也会产生同样的错误信息

【问题讨论】:

  • 你试过 tryCatch 了吗?
  • 我有,我不知道该去哪里,如果我使用“tryCatch”回答我自己的问题,我会发布它
  • 尝试stopifnotstop 如果否则阻塞。如果您使用的是stop,请务必拨打电话。 = FALSE 并传递适当的错误消息

标签: r error-handling automation


【解决方案1】:

所以看来这段代码在某种程度上是有效的

wrapcheck <- function(x){
repeatCheck =tryCatch(checkOutCell(764), 
                  error = function(cond)"skip")

SudoCheck = ifelse(repeatCheck=="skip",repeatCheck, checkOutCell(764))

while(SudoCheck == "skip"){
repeatCheck
}
}

包装检查(764) 基本上,这会检查错误,然后继续运行该函数,直到不产生错误为止。事实上,我相当有信心这将适用于您想要代替 CheckOutCell 的任何功能。

主要问题是当函数被锁定时,它并不是真正的错误,而是被锁定。因此,上面的块将不起作用。当产生锁以外的错误时,上述块将起作用。

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2016-11-14
    • 2020-07-11
    • 1970-01-01
    相关资源
    最近更新 更多