¿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.


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 

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
}

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.