Perfilamiento de código en R

Revisar las notas de Tere: 4.4 Rendimiento en R | Estadística Computacional para analizar el uso de recursos computacionales en los métodos de integración del rectángulo, trapecio y Simpson de 1.5.Integracion_numerica.

También podemos medir tiempos con el paquete tictoc:


In [ ]:
install.packages("tictoc",lib="/usr/local/lib/R/site-library/",
                repos="https://cran.itam.mx/",verbose=TRUE)

Ejemplo:


In [1]:
library(tictoc)

3) Regla compuesta del rectángulo


In [2]:
f<-function(x)exp(-x**2)

In [3]:
a<-0
b<-1
n<-10**6
h_hat<-(b-a)/n

Forma secuencial


In [4]:
Rcf1<-function(f,a,b,n){
    #Compute numerical approximation using rectangle or mid-point method in 
    #an interval.
    #Nodes are generated via formula: x_i = a+(i+1/2)h_hat for i=0,1,...,n-1 and h_hat=(b-a)/n
    #Args:
    #    f (function): function of integrand
    #    a (int): left point of interval
    #    b (int): right point of interval
    #    n (int): number of subintervals
    #Returns:
    #    Rcf (float)
    h_hat<-(b-a)/n
    sum_res<-0
    for(j in 0:(n-1)){
        x<-a+(j+1/2.0)*h_hat
        sum_res<-sum_res+f(x)
    }
    h_hat*sum_res
}

In [5]:
system.time(aprox<-Rcf1(f,a,b,n))


   user  system elapsed 
  0.570   0.000   0.568 

In [6]:
err_relativo<-function(aprox,obj)abs(aprox-obj)/abs(obj)

In [7]:
obj<-integrate(Vectorize(f),a,b) #en la documentación de integrate
                                 #se menciona que se utilice Vectorize

In [8]:
err_relativo(aprox,obj$value)


6.71939731300312e-14

In [12]:
tic("medición de sleep + regla del trapecio secuencial")
tic("medición de tiempo de regla de trapecio secuencial con tictoc")
tic()
Rcf1(f,a,b,n)
toc()
Sys.sleep(1)
toc()


0.746824132812477
medición de tiempo de regla de trapecio secuencial con tictoc: 0.637 sec elapsed
medición de sleep + regla del trapecio secuencial: 1.655 sec elapsed