Come mettere in pausa l'esecuzione, dormire, attendere X secondi in R?


129

Come si mette in pausa uno script R per un numero specificato di secondi o millisecondi? In molte lingue, esiste una sleepfunzione, ma fa ?sleepriferimento a un set di dati. E ?pausee ?waitnon esistono.

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


5
@Ricardo, abbiamo discusso a fondo di questo con Joshua e altri e alla fine abbiamo concordato che sia "pause" che "sleep" dovrebbero essere nel titolo. Il titolo finale è stato il risultato di un compromesso. E fai un passo avanti e senza alcun motivo per cui il tuo titolo è meglio ripristinare alla revisione precedente? L'aggiunta di "sleep" al titolo semplifica la ricerca della domanda, poiché "sleep" è disponibile in molte lingue e vi è un'alta probabilità che gli utenti la cerchino. Il titolo corrente contiene molte parole e la parola chiave mancante. Qual era lo scopo del tuo rollback?
TMS,

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

Risposte:


145

Vedere help(Sys.sleep) .

Ad esempio, da ?Sys.sleep

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

cedimento

> 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 <- function (x) {p1 <- proc.time () Sys.sleep (x) proc.time () - p1 # L'utilizzo della cpu dovrebbe essere trascurabile} testit (3.7)
Dan Goldstein

21
A proposito, help.search ("sleep") ti avrebbe diretto in quel modo.
Dirk Eddelbuettel,

Perché non puoi fare solo Sys.sleep(10)?
Léo Léopold Hertz

Penso che tu fraintenda il mio esempio e la mia illustrazione che misurano e quindi dimostrano esattamente questo,
Dirk Eddelbuettel,

13

Sys.sleep () non funzionerà se l'utilizzo della CPU è molto elevato; come in altri processi critici ad alta priorità (in parallelo).

Questo codice ha funzionato per me. Qui sto stampando da 1 a 1000 ad un intervallo 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
}

la funzione Sys.sleep () non funzionava nel mio caso d'uso e questo era l'unico modo in cui ero in grado di gestire la produzione del ritardo necessario.
Pake
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.