2016-08-30 2 views
4

У меня есть код, и я использую цикл внутри него, теперь я хочу, чтобы этот цикл был остановлен на короткий промежуток времени после завершения одного запроса. Но когда этот цикл выполняет следующий запрос, я хочу, чтобы он был остановлен на другой временной интервал. Для например После 1-го запроса - 10 сек После 2-го запроса - 15сек и так далее ..Размещение различных значений для Sys.sleep в цикле, несколько значений времени

Ниже петля

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

'Sys.sleep()' принимает один аргумент '' время =. – zx8754

+0

Да, я понял, каким-то другим способом? –

+0

Почему мы не хотим использовать Sys.sleep? – zx8754

ответ

2

В случае, если вы хотите создать сон-цикл для каждой итерации, и начать синхронизацию для сна длительность перед тем ваших действий, а также увеличить сон с 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) 
    } 
    } 

Поскольку мы не имеем никакого furthe r информацию о вашей проблеме (или воспроизводимом коде), я предполагаю, что вы столкнулись с проблемами с перегрузкой какого-либо типа 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) 
+0

Спасибо за ваше решение, но что делать, если я должен продолжать выполнять эти временные интервалы снова и снова в виде цикла пока мои запросы не закончится? –

+0

Теперь, когда я прочитал ваш вопрос, вы хотели спать _after_ действие, а не время между каждым действием (то есть раньше), как я написал в своем ответе. Я обновил его, чтобы он соответствовал вашему ответу. В следующий раз, пожалуйста, дайте нам воспроизводимые данные, чтобы мы могли легче подойти к решению, которое в конечном итоге принесет пользу! – nadizan

+0

Спасибо, друг, это то, что мне нужно. Извинения за неясный вопрос. –

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 
+0

Хорошо, это тоже удобно. Благодаря ! –

+0

@pankaj Happy вы нашли это полезным. Кому: есть ли причина для downvote? – Choubi

Смежные вопросы