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.


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 

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
}

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.