Como fazer a execução pausar, dormir, aguardar X segundos no R?

129

Como você pausa um script R por um número especificado de segundos ou milissegundos? Em muitos idiomas, existe uma sleepfunção, mas faz ?sleepreferência a um conjunto de dados. E ?pausee ?waitnão existem.

O objetivo pretendido é para animações temporizadas. A solução desejada funciona sem solicitar a entrada do usuário.

Dan Goldstein
fonte
5
@ Ricardo, tivemos uma discussão completa com Joshua e outros e finalmente concordamos que "pausa" e "sono" deveriam estar no título. O título final foi resultado de um compromisso. E você apenas entra em cena e sem nenhum argumento por que seu título é melhor retroceder à revisão anterior? A adição de "suspensão" ao título torna a pergunta muito mais fácil de encontrar, porque "suspensão" está em vários idiomas e há uma alta probabilidade de que os usuários a procurem. O título atual contém muitas palavras balast e a palavra-chave importante está ausente. Qual foi o objetivo de sua reversão?
TMS
O Google "r sleep" não conseguiu encontrá-lo, tentou corrigi-lo.
TMS

Respostas:

145

Veja help(Sys.sleep).

Por exemplo, de ?Sys.sleep

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

Produzindo

> testit(3.7)
   user  system elapsed 
  0.000   0.000   3.704 
Dirk Eddelbuettel
fonte
1
Aqui está o código de exemplo dessa página. Para pausar por 3,7 segundos testit <- função (x) {p1 <- proc.time () Sys.sleep (x) proc.time () - p1 # O uso da CPU deve ser desprezível} testit (3.7)
Dan Goldstein
21
A propósito, help.search ("sleep") o direcionaria dessa maneira.
Dirk Eddelbuettel
Por que você não pode fazer exatamente Sys.sleep(10)?
Léo Léopold Hertz #
Eu acho que você não entendeu meu exemplo e ilustração, que também mede e, portanto, demonstra exatamente isso:
Dirk Eddelbuettel 10/11/16
13

Sys.sleep () não funcionará se o uso da CPU for muito alto; como em outros processos críticos de alta prioridade estão em execução (em paralelo).

Este código funcionou para mim. Aqui estou imprimindo de 1 a 1000 em um intervalo de 2,5 segundos.

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
fonte
a função Sys.sleep () não funcionou no meu caso de uso e foi a única maneira que consegui gerenciar produzindo o atraso necessário.
Pake