Comment mettre l'exécution en pause, dormir, attendre X secondes dans R?

130

Comment suspendre un script R pendant un nombre spécifié de secondes ou de millisecondes? Dans de nombreuses langues, il existe une sleepfonction, mais fait ?sleepréférence à un ensemble de données. Et ?pauseet ?waitn'existent pas.

Le but visé est les animations auto-chronométrées. La solution souhaitée fonctionne sans demander l'entrée de l'utilisateur.

Dan Goldstein
la source
5
@Ricardo, nous avons eu toute une discussion à ce sujet avec Joshua et d'autres et nous avons finalement convenu que "pause" et "sommeil" devraient être dans le titre. Le titre final était le résultat d'un compromis. Et vous venez d'intervenir et sans aucun argument pourquoi votre titre est meilleur retour à la révision précédente? Ajouter «sleep» au titre rend la question beaucoup plus facile à trouver, car «sleep» est dans de nombreuses langues et il y a une forte probabilité que les utilisateurs la recherchent. Le titre actuel contient beaucoup de mot balast et le mot clé important est manquant. Quel était le but de votre restauration?
TMS
Google "r sleep" n'a pas pu le trouver, a essayé de le réparer.
TMS

Réponses:

145

Voir help(Sys.sleep).

Par exemple, à partir de ?Sys.sleep

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

Céder

> testit(3.7)
   user  system elapsed 
  0.000   0.000   3.704 
Dirk Eddelbuettel
la source
1
Voici l'exemple de code de cette page. Pour faire une pause de 3,7 secondes testit <- function (x) {p1 <- proc.time () Sys.sleep (x) proc.time () - p1 # L'utilisation du processeur doit être négligeable} testit (3.7)
Dan Goldstein
21
Au fait, help.search ("sleep") vous aurait orienté de cette façon.
Dirk Eddelbuettel
Pourquoi tu ne peux pas faire juste Sys.sleep(10)?
Léo Léopold Hertz 준영
Je pense que vous avez mal compris mon exemple et mon illustration qui mesurent également et donc démontrent exactement cela,
Dirk Eddelbuettel
14

Sys.sleep () ne fonctionnera pas si l'utilisation du processeur est très élevée; comme dans d'autres processus critiques de haute priorité sont en cours d'exécution (en parallèle).

Ce code a fonctionné pour moi. Ici, j'imprime 1 à 1000 à un intervalle de 2,5 secondes.

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
la source
la fonction Sys.sleep () ne fonctionnait pas dans mon cas d'utilisation, et c'était la seule façon dont j'ai pu gérer la production du délai nécessaire.
Pake le