gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:42:46 24 4
gpt4 key购买 nike

我想应用一个函数(本解释中的“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 循环中应用“下一个”条件。已经搜索过以找到更清晰的解释,但在这里没有任何运气。

最佳答案

withTimeout()来自包裹 R.utils , 与 tryCatch() 合作,可能会提供更清洁的解决方案。

例如:

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()以秒为单位设置时间限制。
  • TimeoutException论据 tryCatch()接受一个在循环迭代超时时执行的函数。
  • 关于r - 限制函数在 R for 循环中处理的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8652681/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com