2012-06-05 30 views
5

que estoy buscando una manera de almacenar veces seguidas en una variable en R. En MATLAB que uno puede hacer algo en la línea:almacenar valores de tic toc en I

tic;
...
x = toc;

y luego el tiempo de ejecución se almacena en la variable x. He intentado hacer lo mismo con la función tic() toc() en R procedente del paquete MATLAB sin éxito. Además, no puedo ver cómo se puede hacer esto usando la función system.time() de R tampoco. Cualquier ayuda aquí es muy apreciada.

+0

pregunta duplicados: http://stackoverflow.com/questions/1716012/stopwatch-function-in-r –

+1

@VincentZoonekynd: Me estaba preguntando cómo almacenarlo. –

+1

@StefanHansen: lo almacena como si guardara cualquier otro valor variable ... '<-'. –

Respuesta

12

Utilice la incorporada en el system.time función:

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

o, como alternativa la función de benchmark de rbenchmark paquete:

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

Oh, fue así de simple. Gracias :) –

12

más similar a tic y toc y, a veces más práctico, por ejemplo, para los mensajes de estado en bucles:

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

O se puede hacer como se describe en el paquete'titoc'.

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

su salida se almacena en log.txt. Puede unlist(log.txt) y analizarlo como una cadena si solo desea el tiempo en segundos.

Cheers,

1

El paquete tictoc implementa esta funcionalidad exacta, por lo que la sincronización de tiempos secuenciales o anidados se almacena en una lista y para su posterior análisis.

Por ejemplo, para sincronizar cada iteración de un ciclo y analizar los resultados más tarde, use la funcionalidad 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) 
} 

buscar a los resultados de toc() como texto con formato para su impresión.

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

Extraiga la lista que contiene las mediciones en formato sin formato.

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

Como los datos ya se han extraído, borre el registro de tictoc.

tic.clearlog() 

Convierta los elementos de la lista a los tiempos. Cada elemento de la lista tiene una marca de tiempo de inicio (tic) y final (toc).

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

Calcule el tiempo promedio de bucle.

mean(timings) 
# [1] 1.001 

Imprimir la salida de texto - en cuenta que los prefijos son los valores de 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