2009-07-23 11 views
94

¿Cómo pausa una secuencia de comandos R durante un número específico de segundos o milisegundos? En muchos idiomas, existe una función sleep, pero ?sleep hace referencia a un conjunto de datos. Y ?pause y ?wait no existen.¿Cómo hacer que la ejecución se detenga, duerma, espere X segundos en R?

El propósito previsto es para animaciones auto-programadas. La solución deseada funciona sin pedir la entrada del usuario.

+3

@Ricardo, tuvimos una discusión completa sobre esto con Joshua y otros y finalmente acordamos que tanto "pausa" como "sueño" deberían estar en el título. El título final fue el resultado de un compromiso. ¿Y usted acaba de intervenir 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 gran probabilidad de que los usuarios la busquen. El título actual contiene mucha palabra balast y la palabra clave importante falta. * ¿Cuál fue el propósito de tu reversión? * – TMS

+0

Google "r sleep" no pudo encontrarlo, intentó solucionarlo. – TMS

Respuesta

112

Ver help(Sys.sleep).

Por ejemplo, desde ?Sys.sleep

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

Ceder

> 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 durante 3,7 segundos TestIt <- function (x) { p1 <- proc.time() Sys.sleep (x) proc.time() - p1 # El uso de la CPU debería ser insignificante } TestIt (3.7) –

+19

Por cierto, help.search ("dormir") te habría dirigido de esa manera. –

+0

¿Por qué no puedes hacer 'Sys.sleep (10)'? –

0

hice un ejemplo para ti, espero que sea útil

# 1st let make a graph with limits xlim =0:10 e ylim=0:10. 
plot(0:10,0:10, type="n") 

# let use the 'for' to put texts on graph: 
for(i in 1:10) 
    text(i,i, paste("**", i)) 

## let retard steps 1 sec 

plot(0:10,0:10, type="n") 
for(i in 1:9){ 
    text(i,i, paste("step", i)) 
    Sys.sleep(1) 
} 

# please wait some seconds....... 
# now faster 
plot(0:10,0:10, type="n") 
for(k in 1:9){ 
    text(k,k, paste("step", k)) 
    Sys.sleep(.1) ## retard steps 0,1 sec 
} 
+0

Por favor, amigos Necesito tu ayuda: Estoy tratando de usar Sys.sleep para ejecutar el punto de la trama de una función y el resultado es diagramación rápida y solo después de que la trama comience Sys.sleep counter donde me estoy equivocando? –

+0

ops .... Un this função E: –

+0

n = 1 CN = 6,45 t = 5 x <-seq (0, 5) x para (i en 0: 5) { wxt <- función (x) {ronda (Cn * sin (n * pi * x/5) * exp (- (pi^2 * n^2/25) * t), dígitos = 2) } Sys.sleep (1) plot (x, wxt (x), col = "blue") } # quiero punto por punto –

1

Sys.sleep() no lo hará funciona 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 funcionó para mí. Aquí estoy imprimiendo 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 
} 
Cuestiones relacionadas