Jak zrobić pauzę wykonania, uśpić, poczekać X sekund w R?

129

Jak wstrzymać skrypt języka R na określoną liczbę sekund lub milisekund? W wielu językach jest sleepfunkcja, ale ?sleepodwołuje się do zbioru danych. A ?pausei ?waitnie istnieją.

Przeznaczeniem są animacje samowyzwalające. Żądane rozwiązanie działa bez pytania użytkownika o wprowadzenie danych.

Dan Goldstein
źródło
5
@Ricardo, przeprowadziliśmy całą dyskusję na ten temat z Joshuą i innymi osobami i ostatecznie zgodziliśmy się, że w tytule powinny znaleźć się słowa „pauza” i „sen”. Ostateczny tytuł był wynikiem kompromisu. I po prostu wkraczasz i bez żadnych argumentów, dlaczego twój tytuł jest lepszy w porównaniu z poprzednią wersją? Dodanie słowa „sen” do tytułu znacznie ułatwia znalezienie pytania, ponieważ słowo „sen” występuje w wielu językach i istnieje duże prawdopodobieństwo, że użytkownicy będą go szukać. Obecny tytuł zawiera dużo balastu słów i brakuje ważnego słowa kluczowego. Jaki był cel twojego wycofania?
TMS,
Google „r sleep” nie mógł go znaleźć, próbował to naprawić.
TMS

Odpowiedzi:

145

Widzieć help(Sys.sleep) .

Na przykład z ?Sys.sleep

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

Wydajność

> testit(3.7)
   user  system elapsed 
  0.000   0.000   3.704 
Dirk Eddelbuettel
źródło
1
Oto przykładowy kod z tej strony. Aby wstrzymać na 3,7 sekundy testit <- function (x) {p1 <- proc.time () Sys.sleep (x) proc.time () - p1 # Zużycie procesora powinno być pomijalne} testit (3.7)
Dan Goldstein
21
Nawiasem mówiąc, help.search („sleep”) skierowałoby cię w ten sposób.
Dirk Eddelbuettel
Dlaczego nie możesz po prostu zrobić Sys.sleep(10)?
Léo Léopold Hertz 준영
Myślę, że źle zrozumiałeś mój przykład i ilustrację, która również mierzy, a zatem dokładnie to demonstruje ,
Dirk Eddelbuettel,
13

Sys.sleep () nie zadziała, jeśli użycie procesora jest bardzo wysokie; podobnie jak w innych krytycznych procesach o wysokim priorytecie (równolegle).

Ten kod zadziałał dla mnie. Tutaj drukuję od 1 do 1000 w odstępach 2,5 sekundy.

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
}
rbtj
źródło
funkcja Sys.sleep () nie działała w moim przypadku użycia i był to jedyny sposób, w jaki byłem w stanie stworzyć niezbędne opóźnienie.
Pake