我有一个代码,我在其中使用循环,现在我希望这个循环在完成一个查询后停留一小段时间。但是当这个循环执行下一个查询时,我希望它在不同的时间间隔内停止。 例如 第一次查询后 - 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
但不知道如何将它用于上面的动机。
答案 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