2012-06-05 24 views
5

szukam sposób przechowywać razy uruchomiony w zmiennej w R. W jednym MATLAB można zrobić coś wzdłuż linii:Przechowywanie wartości tic toc w R

tic;
...
x = toc;

, a następnie czas pracy jest zapisany w zmiennej x. Próbowałem zrobić to samo z funkcją tic() toc() w R pochodzącą z pakietu MATLAB bez powodzenia. Ponadto nie widzę, jak można to zrobić za pomocą funkcji system.time() R ani. Każda pomoc tutaj jest bardzo doceniana.

+0

duplikatów pytanie: http://stackoverflow.com/questions/1716012/stopwatch-function-in-r –

+1

@VincentZoonekynd: Pytałem, jak je przechowywać. –

+1

@StefanHansen: przechowujesz go tak, jak przechowujesz dowolną inną wartość zmiennej ... '<-'. –

Odpowiedz

12

pomocą wbudowanego system.time funkcję:

tm1 <- system.time(
{ 
    #your code here 
}) 

lub, alternatywnie, funkcja benchmark z rbenchmark opakowania:

tm2 <- benchmark(
{ 
    #your code here 
}, replications=1) 
+0

Och, to było takie proste. Dzięki :) –

12

bardziej podobny do tic i toc czasami bardziej poręczne np dla komunikatów o stanie w pętli:

start <- Sys.time() 
do.something() 
Sys.time() - start 
2

Albo można zrobić, jak to jest opisane w pakiecie'titoc'.

tic("timer") 
1+1 
toc(log = TRUE, quiet = TRUE) 
log.txt <- tic.log(format = TRUE) 
tic.clearlog() 

Twój wyjściowy jest następnie przechowywany w log.txt. Możesz unlist(log.txt) i analizować go jako ciąg, jeśli chcesz tylko czas w sekundach.

zdrowie,

1

Pakiet tictoc wdraża dokładnie tę funkcjonalność, a więc czas kolejnego lub zagnieżdżonych czasy są przechowywane na liście i do następnej analizy.

Na przykład od czasu do każdej iteracji pętli i analizy wyników później, użyj funkcji log.

library(tictoc) 
tic.clearlog() 
for (x in 1:10) { 
    # passing x to tic() makes it a label at time of the matching toc() call. 
    tic(x) 
    Sys.sleep(1) 
    # When log = TRUE, toc() pushes the measured timing to a list 
    # quiet = TRUE prevents from printing the timing 
    toc(log = TRUE, quiet = TRUE) 
} 

Fetch wyniki toc() jako sformatowanego tekstu do druku.

log.txt <- tic.log(format = TRUE) 

Wyodrębnij listę zawierającą pomiary w formacie nieprzetworzonym.

log.lst <- tic.log(format = FALSE) 

Ponieważ dane są już wyodrębnione, wyczyścić dziennik tictoc.

tic.clearlog() 

Konwertuj elementy listy na taktowanie. Każdy element listy ma znacznik czasu rozpoczęcia (tic) i końca (toc).

timings <- unlist(lapply(log.lst, function(x) x$toc - x$tic)) 

Obliczyć średni czas pętli.

mean(timings) 
# [1] 1.001 

Drukuj wyjście tekst - zauważ, że prefiksy są wartościami x.

writeLines(unlist(log.txt)) 
# 1: 1.002 sec elapsed 
# 2: 1 sec elapsed 
# 3: 1.002 sec elapsed 
# 4: 1.001 sec elapsed 
# 5: 1.001 sec elapsed 
# 6: 1.001 sec elapsed 
# 7: 1.001 sec elapsed 
# 8: 1.001 sec elapsed 
# 9: 1.001 sec elapsed 
# 10: 1 sec elapsed 
Powiązane problemy