在循环中为Sys.sleep放置不同的值,多​​个时间值

时间:2016-08-30 07:01:18

标签: r

我有一个代码,我在其中使用循环,现在我希望这个循环在完成一个查询后停留一小段时间。但是当这个循环执行下一个查询时,我希望它在不同的时间间隔内停止。 例如 第一次查询后 - 10秒 第二次查询后 - 15秒等等..

以下是循环

for (i in 1:nrow(uniquemail)) {
    k <- 2
    test3 <- subset(finaltest, finaltest$Email == uniquemail[i,1])
    for (j in 1:nrow(test3)) {

      uniquemail[i,k] <- test3[j,2]
      uniquemail[i,k+1] <- as.character(test3[j,3])
      uniquemail[i,k+2] <- as.numeric(test3[j,4])
      uniquemail[i,k+3] <- as.numeric(test3[j,5])

      k <- k+4

      print(paste(i,j,k)) 
    }
  }

有什么方法可以完成这件事。我使用Sys.sleep但不知道如何将它用于上面的动机。

2 个答案:

答案 0 :(得分:3)

如果你想为每次迭代创建一个睡眠循环,并在你的行动之前开始睡眠持续时间的时间,并且每个循环增加睡眠5秒,你可以使用这个代码: 见下文:

for (j in 1:3) {
tm <- proc.time() #take timing before your action

#do your things here
#
#

tmdiff <-(5 * j) - (proc.time()[3] - tm[3]) #you want to wait 5 seconds the first time,
#10 sec the second time, 15 sec the third time etc..

if (tmdiff > 0) {
  #depending of how long your "thing" took,
  print(paste("sleep for", tmdiff, "seconds"))#you are taking the difference from the start to end of "actions" and sleeping for that time
  Sys.sleep(tmdiff)
  }
}

如果您想在行动后开始休眠时间

for (j in 1:3) {    
    #do your things here
    #
    #  
      tmsleep<-(5 * j) #you want to wait 5 seconds the first time,
                       #10 sec the second time, 15 sec the third time etc..
      print(paste("sleep for", tmsleep, "seconds"))
      Sys.sleep(tmsleep)
    }
  }

由于我们没有关于您的问题的任何进一步信息(也不是可重现的代码),我认为您遇到了重载某些类型的API和/或网页抓取的问题。如果是这样,我宁愿从选定的值范围中抽样我的睡眠时间,例如:

tmsleep<-sample(5:15,1)
Sys.sleep(tmsleep)

即。睡眠时间在5到15秒之间。此外,如果您想拥有可预测的休眠时间,可以使用set.seed(j),其中j是循环变量:

set.seed(j)
tmsleep<-sample(5:15,1)
Sys.sleep(tmsleep)

答案 1 :(得分:0)

“如果我必须一次又一次地将这些时间间隔作为循环运行,直到我的查询没有结束?”

循环之前: 你可以创建一个你想要的时间向量,你可以自己创建它:

timings <- c(5, 2, 10, 8, 7)

或者随机生成一个,如果您希望从一次运行到另一次运行的时间相同,则设置种子:

timings <- sample(5:10, 10)

在循环中,使用Sys.sleep一个接一个的时间向量值。通过使用向量的模数长度,当向量完成时,它将环绕第一个值。

Sys.sleep(timings[(i-1) %% length(timings) + 1])

模数的例子:

for (i in 1:15){      
  print(timings[(i-1) %% length(timings) + 1])
}

输出:

[1] 5
[1] 2
[1] 10
[1] 8
[1] 7
[1] 5
[1] 2
[1] 10
[1] 8
[1] 7
[1] 5
[1] 2
[1] 10
[1] 8
[1] 7