Wie kann man die Ausführung in R anhalten, schlafen und X Sekunden warten lassen?


128

Wie kann ein R-Skript für eine bestimmte Anzahl von Sekunden oder Millisekunden angehalten werden? In vielen Sprachen gibt es eine sleepFunktion, die jedoch ?sleepauf einen Datensatz verweist. Und ?pauseund ?waitexistieren nicht.

Der beabsichtigte Zweck sind selbstgesteuerte Animationen. Die gewünschte Lösung funktioniert ohne Benutzereingabe.


5
@ Ricardo, wir hatten eine ganze Diskussion darüber mit Joshua und anderen und wir waren uns schließlich einig, dass sowohl "Pause" als auch "Schlaf" im Titel sein sollten. Der endgültige Titel war das Ergebnis eines Kompromisses. Und Sie treten einfach ein und ohne Argument, warum Ihr Titel besser auf die vorherige Überarbeitung zurückgesetzt werden kann? Das Hinzufügen von "Schlaf" zum Titel erleichtert das Auffinden der Frage erheblich, da "Schlaf" in vielen Sprachen vorliegt und die Wahrscheinlichkeit hoch ist, dass Benutzer danach suchen. Der aktuelle Titel enthält viel Wortbalast und das wichtige Schlüsselwort fehlt. Was war der Zweck Ihres Rollbacks?
TMS

Google "r sleep" konnte es nicht finden und versuchte es zu beheben.
TMS

Antworten:


144

Siehe help(Sys.sleep).

Zum Beispiel von ?Sys.sleep

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

Nachgeben

> testit(3.7)
   user  system elapsed 
  0.000   0.000   3.704 

1
Hier ist der Beispielcode von dieser Seite. Um 3,7 Sekunden zu pausieren testit <- function (x) {p1 <- proc.time () Sys.sleep (x) proc.time () - p1 # Die CPU-Auslastung sollte vernachlässigbar sein} testit (3.7)
Dan Goldstein

21
Übrigens hätte help.search ("sleep") Sie in diese Richtung geleitet.
Dirk Eddelbuettel

Warum kannst du nicht einfach machen Sys.sleep(10)?
Léo Léopold Hertz 준영

Ich denke, Sie verstehen mein Beispiel und meine Illustration falsch, die auch genau das messen und damit demonstrieren .
Dirk Eddelbuettel

13

Sys.sleep () funktioniert nicht, wenn die CPU-Auslastung sehr hoch ist. wie in anderen kritischen Prozessen mit hoher Priorität laufen (parallel).

Dieser Code hat bei mir funktioniert. Hier drucke ich 1 bis 1000 im Abstand von 2,5 Sekunden.

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
}

Die Funktion Sys.sleep () funktionierte in meinem Anwendungsfall nicht, und nur so konnte ich die erforderliche Verzögerung erzeugen.
Pake
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.