2016-08-30 2 views
4

코드가 있고 그 안에 루프를 사용하고 있습니다. 이제이 루프가 한 번의 쿼리를 완료 한 후 잠시 멈추도록하고 싶습니다. 하지만이 루프가 다음 쿼리를 실행하면 다른 시간 간격으로 중지되기를 원합니다. 10 초 2 쿼리 후 - - 1 쿼리 후 예를 들어 를 들어 다음 등 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을 가지고 있지 않기 때문에 문제에 대한 정보 (또는 재현 가능한 코드)가 없으면 일부 유형의 API 및/또는 웹 스크랩에 과부하가 발생하는 것으로 간주됩니다. 그렇다면 다음과 같은 선택된 값 범위에서 수면 시간을 샘플링합니다.

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

예 : 5 - 15 초 사이의 값으로 sleep (잠). 또한 당신은 당신이 j은 루프 변수 set.seed(j)를 사용할 수있는 예측 가능한 수면 시간을 갖고 싶어 :

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

해결책 주셔서 감사합니다.하지만 반복해서 반복해야한다면 어떻게해야합니까? 내 질문이 끝나지 않을 때까지? –

+0

이제 질문을 읽었을 때 당신은 행동으로 잠들기를 원했고, 나의 대답으로 쓴 것처럼 각 행동 사이에 시간을 두지 않았습니다. 귀하의 답변에 맞도록 업데이트했습니다. 다음 번에는 재현 할 수있는 데이터를 제공하여 솔루션에 손쉽게 도달 할 수있게하십시오. 궁극적으로는 귀하에게 이익이됩니다! – 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 당신은 그것이 유용하다는 것을 알게되었습니다. 누구에게 : downvote에 대한 이유가 있습니까? – Choubi

관련 문제