I want to run a R code at a specific time

前端 未结 2 474
庸人自扰
庸人自扰 2020-12-30 16:25

I want to run a R code at a specific time that I need. And after the process finished, I want to terminate the R session.

If a code is as below,

tm&         


        
相关标签:
2条回答
  • 2020-12-30 16:54

    It is easiest to use the Task Scheduler of Windows, or a cron job under Linux. There you can specify a command or program that should be run at a certain time you specify. I would definitely not recommend an R script like:

    time_to_run = as.POSIXct("2012-04-18 17:25:40")
    while(TRUE) {
       Sys.sleep(1)
       if(Sys.time == time_to_run) {
         ## run some code
       }
    }
    
    0 讨论(0)
  • 2020-12-30 16:57

    If somehow you cannot use the cron job service and have to schedule within R, the following R code shows how to wait a specific amount of time so as to execute at a pre-specified target time.

    stop.date.time.1 <- as.POSIXct("2012-12-20 13:45:00 EST") # time of last afternoon execution. 
    stop.date.time.2 <- as.POSIXct("2012-12-20 7:45:00 EST") # time of last morning execution.
    NOW <- Sys.time()                                        # the current time
    lapse.time <- 24 * 60 * 60              # A day's worth of time in Seconds
    all.exec.times.1 <- seq(stop.date.time.1, NOW, -lapse.time) # all of afternoon execution times. 
    all.exec.times.2 <- seq(stop.date.time.2, NOW, -lapse.time) # all of morning execution times. 
    all.exec.times <- sort(c(all.exec.times.1, all.exec.times.2)) # combine all times and sort from recent to future
    cat("To execute your code at the following times:\n"); print(all.exec.times)
    
    for (i in seq(length(all.exec.times))) {   # for each target time in the sequence
      ## How long do I have to wait for the next execution from Now.
      wait.time <- difftime(Sys.time(), all.exec.times[i], units="secs") # calc difference in seconds.
      cat("Waiting for", wait.time, "seconds before next execution\n")
      if (wait.time > 0) {
        Sys.sleep(wait.time)   # Wait from Now until the target time arrives (for "wait.time" seconds)
        {
          ## Put your execution code or function call here
        }
      }
    }
    
    0 讨论(0)
提交回复
热议问题