Calcular el tiempo de ejecución de un código de R

Puede resultar insignificante, principalmente a las personas que hacen un uso moderado de R, pero en un mundo de constante optimización, el tiempo lo es todo. Y no es lo mismo que un código tarde en ejecutarse 10 minutos que 30 minutos. Así visto, cualquiera puede apreciar que no hay tanta diferencia. Sin embargo, si una tarea en R se hace en 2 días de ejecución del código, ¿a que no es lo mismo que tarde 6 días? Esto cambia sustancialmente nuestra visión, ¿verdad? Dicho esto, es realmente importante saber cómo calcular el tiempo de ejecución de un código de R. Y a continuación os diré cómo hacerlo, obviamente, usando unas pocas líneas de código de R.

Calcular el tiempo de ejecución de un código de R

Cómo calcular el tiempo de ejecución de un código de R

Para poder calcular el tiempo de ejecución de un código de R, cualquiera que sea, tenemos que utilizar dos líneas de código. Una se pone al principio del código y otra al final del mismo. Es decir, entre las dos líneas hacen un sándwich cuyo resultado es el tiempo de ejecución de lo contenido dentro del mismo. Y para ello vamos a usar la función proc.time(), clave para calcular estos tiempos.

Primera línea para calcular el tiempo de ejecución

Primero y más importante, tenemos que añadir la siguiente línea al principio de nuestro código:

t <- proc.time()

Con esta línea estamos generando un objeto (t) que va a contener el momento inicial de ejecución del código.

Última línea para calcular el tiempo de ejecución

Por último, tenemos que añadir al final de nuestro código la siguiente línea:

proc.time() - t

proc.time() en esta línea registra el momento justo en que se ejecuta. Si a este momento concreto se le resta el objeto t, que contiene el momento inicial, el resultado es un periodo de tiempo. Y este periodo se corresponde con el tiempo de ejecución del código situado entre ambas líneas.

Ejemplo con una función de cronómetro

Vamos a utilizar un código de R que hemos obtenido de esta página, que incluye una función que ejecuta un cronómetro. Como podréis ver, la función countdown() y su ejemplo countdown(5) están contenidos entre las funciones proc.time(). Esto simplemente va a ejecutar una función de cronómetro de 5 segundos.

t <- proc.time()
countdown <- function(from)
{
print(from)
while(from!=0)
{
Sys.sleep(1)
from <- from - 1
print(from)
}
}

countdown(5)
proc.time() - t

Y este es el resultado:

user system elapsed
0.025 0.024 5.017

Interpretación del resultado (en segundos)

Como vemos, la ejecución de proc.time() – t nos devuelve 3 resultados en segundos: user, system y elapsed, que están definidos por el sistema operativo que tengamos. Generalmente, el tiempo del usuario (user) se relaciona con la ejecución del código, el tiempo del sistema (system) se relaciona con procesos del sistema tales como abrir y cerrar archivos, y el tiempo transcurrido (elapsed) es la diferencia en tiempos desde que inició la ejecución hasta su finalización.

Es justamente el valor de elapsed el que nos interesa. Como vemos, la ejecución de todo el código, tanto de la creación de un una función de cronómetro con un ejemplo de 5 segundos, no devuelve unos tiempos de 5.017 segundos. Esto quiere decir que nuestro código ha tardado 5.017 segundos en ejecutarse. Esas 17 milésimas de segundo extra que tarda el código en ejecutarse se corresponden con el tiempo transcurrido en crear la función countdown() más las líneas de código de proc.time().

Es importante señalar, aunque sea obvio, que los tiempos serán diferentes entre todos los ordenadores, ya que dependerán de los tipos de máquinas que tengamos. Y más importante, podréis calcular el tiempo de ejecución de un código de R, como los que tenemos en las diferentes entradas de este blog sobre R.

Deja un comentario

*