source

R에서 실행을 일시 중지하고, 자고, X초 동안 기다리도록 하는 방법은 무엇입니까?

manycodes 2023. 7. 15. 10:19
반응형

R에서 실행을 일시 중지하고, 자고, X초 동안 기다리도록 하는 방법은 무엇입니까?

지정된 시간(초 또는 밀리초) 동안 R 스크립트를 일시 중지하는 방법은 무엇입니까?많은 언어에서, 다음과 같은 것이 있습니다.sleep기능, 그러나?sleep데이터 세트를 참조합니다.그리고.?pause그리고.?wait존재하지 않습니다.

의도된 목적은 셀프 타임 애니메이션을 위한 것입니다.원하는 솔루션은 사용자 입력 없이 작동합니다.

help(Sys.sleep).

예를 들어, 에서?Sys.sleep

testit <- function(x)
{
    p1 <- proc.time()
    Sys.sleep(x)
    proc.time() - p1 # The cpu usage should be negligible
}
testit(3.7)

양보

> testit(3.7)
   user  system elapsed 
  0.000   0.000   3.704 

다른 중요한 우선 순위가 높은 프로세스가 병렬로 실행되는 것처럼 CPU 사용량이 매우 높은 경우에는 Sys.sleep()이 작동하지 않습니다.

이 코드는 저에게 효과가 있었습니다.여기서 2.5초 간격으로 1에서 1000까지 인쇄합니다.

for (i in 1:1000)
{
  print(i)
  date_time<-Sys.time()
  while((as.numeric(Sys.time()) - as.numeric(date_time))<2.5){} #dummy while loop
}

TL;DRsys_sleep안정적이고 정확한 새로운 수면 기능

우리는 이미 알고 있습니다.Sys.sleepCPU 사용량이 매우 높은 경우와 같이 예상대로 작동하지 않을 수 있습니다.
그것이 제가 높은 품질의 기능을 준비하기로 결정한 이유입니다.microbenchmark::get_nanotime()그리고.while/repeat기계학

#' Alternative to Sys.sleep function
#' Expected to be more stable
#' @param val `numeric(1)` value to sleep.
#' @param unit `character(1)` the available units are nanoseconds ("ns"), microseconds ("us"), milliseconds ("ms"), seconds ("s").
#' @note dependency on `microbenchmark` package to reuse `microbenchmark::get_nanotime()`.
#' @examples 
#' # sleep 1 second in different units
#' sys_sleep(1, "s")
#' sys_sleep(100, "ms")
#' sys_sleep(10**6, "us")
#' sys_sleep(10**9, "ns")
#' 
#' sys_sleep(4.5)
#'
sys_sleep <- function(val, unit = c("s", "ms", "us", "ns")) {
  start_time <- microbenchmark::get_nanotime()
  stopifnot(is.numeric(val))
  unit <- match.arg(unit, c("s", "ms", "us", "ns"))
  val_ns <- switch (unit,
    "s" = val * 10**9,
    "ms" = val * 10**7,
    "us" = val * 10**3,
    "ns" = val
  )
  repeat {
    current_time <- microbenchmark::get_nanotime()
    diff_time <- current_time - start_time
    if (diff_time > val_ns) break
  }
}

system.time(sys_sleep(1, "s"))
#>    user  system elapsed 
#>   1.015   0.014   1.030
system.time(sys_sleep(100, "ms"))
#>    user  system elapsed 
#>   0.995   0.002   1.000
system.time(sys_sleep(10**6, "us"))
#>    user  system elapsed 
#>   0.994   0.004   1.000
system.time(sys_sleep(10**9, "ns"))
#>    user  system elapsed 
#>   0.992   0.006   1.000

system.time(sys_sleep(4.5))
#>    user  system elapsed 
#>   4.490   0.008   4.500

repref v2.0.2를 사용하여 2022-11-21에 생성됨

언급URL : https://stackoverflow.com/questions/1174799/how-to-make-execution-pause-sleep-wait-for-x-seconds-in-r

반응형