我想应用一个函数(“foo”用于此解释)将数据向量转换为另一个值。此函数将数据作为输入,并需要将表单提交到网页。有时,此过程进行得很快,而其他时候,可能需要很长时间我想运行for循环(或等效的apply函数)以跳过花费太长时间的项目的方式。我已经尝试使用以下命令限制循环运行的时间,然后跳到下一个5秒:
pb <- txtProgressBar(min = 1, max = 100, style = 3)
storage <- matrix(nrow = sample.length, ncol = 2)
for(i in 1:100){
s <- Sys.time()
storage[i,] <- try(foo(data.vec[i]), TRUE)
if (Sys.time() - s >5) {next}
# update progress bar
setTxtProgressBar(pb, i)
}
close(pb)
我想我一定不明白如何在for循环中应用“next”条件。我已经寻找了更清楚的解释,但在这里没有得到任何运气。
2条答案
按热度按时间cvxl0en21#
来自包
R.utils
的withTimeout()
与tryCatch()
一起可以提供更清洁的解决方案。例如:
在上面的人工例子中:
withTimeout()
的第一个参数包含要在每个循环中计算的代码。withTimeout()
的timeout
参数以秒为单位设置时间限制。tryCatch()
的TimeoutException
参数接受一个将在循环迭代超时时执行的函数。bgibtngc2#
我正在用%dopar%在foreach中创建一个循环,所以运行错误消息让我很头疼,因为这会破坏循环。
我每次都创建跳过变量,当超时发生时,循环进入下一次迭代。希望在使用合作函数时避免任何“停止”或“中断”。