首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制函数在R for循环中的处理时间

限制函数在R for循环中的处理时间
EN

Stack Overflow用户
提问于 2011-12-28 14:33:23
回答 1查看 3.9K关注 0票数 7

我想要应用一个函数(这个解释是“foo”)来将一个数据向量转换为另一个值。此函数将数据作为输入,需要向网页提交表单。有时,这会很快发生,而有时,它可能会持续很长一段时间。我想运行for循环(或等效的应用函数),跳过耗时太长的项目。在跳到下一个5秒之前,我尝试使用以下命令限制循环运行的时间:

代码语言:javascript
复制
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‘条件。一直在寻找一个更清晰的解释,但在这里没有得到任何幸运。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-28 15:22:29

来自R.utils包的withTimeout()tryCatch()配合使用,可能会提供一个更干净的解决方案。

例如:

代码语言:javascript
复制
require(R.utils)

for(i in 1:5) {
    tryCatch(
        expr = {
            withTimeout({Sys.sleep(i); cat(i, "\n")}, 
                         timeout = 3.1)
            }, 
        TimeoutException = function(ex) cat("Timeout. Skipping.\n")
    )
}

# 1 
# 2 
# 3 
# Timeout. Skipping.
# Timeout. Skipping.

在上面的人工示例中:

  • withTimeout()的第一个参数包含每个循环中要计算的代码。
  • timeout参数withTimeout()设置时间限制(以秒为单位)。
  • D14的TimeoutException参数采用循环迭代超时时要执行的函数。
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8652681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档