2009-07-23 14 views
94

Come si mette in pausa uno script R per un numero specificato di secondi o millisecondi? In molte lingue, esiste una funzione sleep, ma ?sleep fa riferimento a un set di dati. E ?pause e ?wait non esistono.Come rendere la pausa di esecuzione, dormire, attendere X secondi in R?

Lo scopo previsto è per le animazioni automatiche. La soluzione desiderata funziona senza chiedere l'input dell'utente.

+3

@Ricardo, abbiamo avuto una discussione completa su questo con Joshua e altri e abbiamo finalmente deciso che sia "pausa" che "sonno" dovrebbero essere nel titolo. Il titolo finale era il risultato di un compromesso. E tu passi e * senza alcun argomento perché il tuo titolo è migliore * rollback alla revisione precedente? Aggiungere "sleep" al titolo rende la domanda molto più facile da trovare, perché "sleep" è in molte lingue e c'è un'alta probabilità che gli utenti lo cerchino. Il titolo corrente contiene un sacco di parole balast e manca la parola chiave importante. * Qual è lo scopo del tuo rollback? * – TMS

+0

Google "r sleep" non è riuscito a trovarlo, ha provato a risolverlo. – TMS

risposta

112

Vedere help(Sys.sleep).

Ad esempio, dal ?Sys.sleep

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

Cedendo

> testit(3.7) 
    user system elapsed 
    0.000 0.000 3.704 
+1

Ecco il codice di esempio da quella pagina. Per mettere in pausa per 3,7 secondi testit <- la funzione (x) { p1 <- proc.time() Sys.sleep (x) proc.time() - p1 # l'utilizzo della CPU dovrebbe essere trascurabile } TestIt (3.7) –

+19

A proposito, help.search ("sleep") ti avrebbe indirizzato in quel modo. –

+0

Perché non puoi fare solo 'Sys.sleep (10)'? –

0

ho fatto un esempio per voi, spero che sia utile

# 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

Per favore, amici Ho bisogno del tuo aiuto: Sto cercando di usare Sys.sleep per eseguire il punto di trama di una funzione e il risultato è trama veloce e solo dopo la trama inizia il contatore di Sys.sleep dove sto andando male? –

+0

ops .... un esta função e: –

+0

n = 1 CN = 6.45 t = 5 x <-seq (0, 5) x for (i in 0: 5) { WXT <- funzione (x) {round (Cn * sin (n * pi * x/5) * exp (- (pi^2 * n^2/25) * t), cifre = 2) } Sys.sleep (1) plot (x, wxt (x), col = "blue") } # voglio punto per punto –

1

Sys.sleep() non lo farà funziona se l'utilizzo della CPU è molto alto; come in altri processi critici ad alta priorità sono in esecuzione (in parallelo).

Questo codice ha funzionato per me. Qui sto stampando da 1 a 1000 a intervalli di 2,5 secondi.

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 
} 
Problemi correlati