¿Cómo hacer que la ejecución haga una pausa, duerma, espere X segundos en R?

129

¿Cómo se detiene un script R durante un número específico de segundos o milisegundos? En muchos idiomas, hay una sleepfunción, pero hace ?sleepreferencia a un conjunto de datos. Y ?pausey ?waitno existen.

El propósito previsto es para animaciones automáticas. La solución deseada funciona sin pedir la entrada del usuario.

Dan Goldstein
fuente
55
@ Ricardo, tuvimos una discusión completa sobre esto con Joshua y otros y finalmente acordamos que tanto "pausa" como "dormir" deberían estar en el título. El título final fue resultado de un compromiso. ¿Y simplemente interviene y sin ningún argumento por qué su título es mejor retroceder a la revisión anterior? Agregar "dormir" al título hace que la pregunta sea mucho más fácil de encontrar, porque "dormir" está en muchos idiomas y hay una alta probabilidad de que los usuarios la busquen. El título actual contiene muchas palabras balanceadas y falta la palabra clave importante. ¿Cuál fue el propósito de su reversión?
TMS
Google "r sleep" no pudo encontrarlo, trató de arreglarlo.
TMS

Respuestas:

145

Ver help(Sys.sleep).

Por ejemplo, de ?Sys.sleep

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

Flexible

> testit(3.7)
   user  system elapsed 
  0.000   0.000   3.704 
Dirk Eddelbuettel
fuente
1
Aquí está el código de ejemplo de esa página. Para hacer una pausa de 3,7 segundos testit <- function (x) {p1 <- proc.time () Sys.sleep (x) proc.time () - p1 # El uso de la CPU debe ser insignificante} testit (3.7)
Dan Goldstein
21
Por cierto, help.search ("dormir") te habría dirigido de esa manera.
Dirk Eddelbuettel
¿Por qué no puedes hacer solo Sys.sleep(10)?
Léo Léopold Hertz 준영
Creo que malinterpretas mi ejemplo e ilustración que también mide y, por lo tanto, demuestra exactamente eso,
Dirk Eddelbuettel
13

Sys.sleep () no funcionará si el uso de la CPU es muy alto; como en otros procesos críticos de alta prioridad se están ejecutando (en paralelo).

Este código me funcionó. Aquí estoy imprimiendo de 1 a 1000 en un intervalo de 2.5 segundos.

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
}
rbtj
fuente
la función Sys.sleep () no funcionó en mi caso de uso, y esta fue la única forma en que pude gestionar la producción del retraso necesario.
Pake