首页 > 解决方案 > for循环中时间限制后返回结果

问题描述

我在 R 中有一个 for 循环遍历数据框。数据帧的每一行都会在 for 循环中的所有操作中产生不同的结果。循环很长,因此我希望对 for 循环有时间限制,当时间到期时,它应该返回在时间限制下它能够计算的所有结果。

我在 R.utils 中尝试了一些函数,但在达到时间限制后它们没有返回结果。

标签: r

解决方案


如果期望的时间已经过去,您可以显式定义一个 return 语句:

df <- data.frame(x=seq(1, 10000, 1), y=rnorm(10000,0, 1))

end.time <- Sys.time()+5
rowsum <- list()

for (i in 1:nrow(df)){
  if (Sys.time()<end.time){
    Sys.sleep(1)
    rowsum[[i]] <- sum(df[i,])
  } else {
    return(rowsum)
  }
}

dim(do.call("rbind", rowsum))
[1] 5 1

重要的元素是带有 return 语句的 if-else 条件。您可以将条件设​​置为您喜欢的任何时间窗口。

一些旁注:我设置了一个 sys.sleep 命令来防止循环在时间之前完成,所以你不需要那个。我还将输出保存在列表而不是数据框中,这也是一个偏好问题。


推荐阅读