具有步骤执行时间限制的For循环

时间:2019-03-28 15:11:48

标签: r

我想限制for循环的每一步的执行时间。简而言之,如果该步骤在10秒钟内未完成,请转到next

更具体地说,这是一些代码。

myComplicatedFunction <- function(obj, ...) { <some code here> }
x # something to process
x_result <- vector(mode = "list", length = length(x))
for (i in seq_along(x)) {
    x_result[[i]] <- 
        processNotMoreThanXSeconds(
            givenTime = 10,
            myComplicatedFunction(x[i]),
            didNotComplete = function() "Time's up!"
        )
}

我的问题是,如何声明这样的功能processNotMoreThanXSeconds

1 个答案:

答案 0 :(得分:5)

您可以使用setTimeLimit(它是基本R的一部分):

setTimeLimit({

  Sys.sleep(7)

}, elapsed = 5)

如果达到时间限制,该函数将返回错误(例如,如果您运行上述操作,则处理需要7秒,但限制为5)。您可以将其与try捆绑在一起以处理错误并继续循环:

myerror <- try({

   setTimeLimit({

     Sys.sleep(7)

   }, elapsed = 5)
}, silent = TRUE)

class(myerror)
#[1] "try-error"

然后使用if-else语句检查是否有错误并继续。像这样:

if (class(myerror) == 'try-error') {
  next
}