[R-es] optimización de código en R
Carlos J. Gil Bellosta
cgb en datanalytics.com
Vie Ene 18 14:22:49 CET 2013
Hola, ¿qué tal?
Pues, por eliminación, parece que sí:
http://books.google.com/ngrams/graph?content=craso%2Ccraso+error%2C+error+craso&year_start=1800&year_end=2000&corpus=21&smoothing=3&share=
Un saludo,
Carlos J. Gil Bellosta
http://www.datanalytics.com
El día 18 de enero de 2013 11:14, "Olivier Nuñez" <onunez en unex.es> escribió:
> Carlos,
>
> tu ultima opción es de lejos la más rápida entre las insesgadas.
> Por cierto, ya que te tengo, el adjetivo "craso" se puede utilizar con otro
> sustantivo que no sea "error"?
> Un abrazo. Olivier
>
>> Hola, ¿qué tal?
>>
>> Sí, mi opción 2 ha sido un craso error. Aquí va otra un poco más fina:
>>
>> sim4 <- function(nreps) {
>> nb1 <- 10 # 10 blue marbles in Urn 1
>> nb2 <- 6 # 6 blue marbles orig. in Urn 2
>> n1 <- 18 # number of marbles in Urn 1 at 1st pick
>> n2 <- 13 # number of marbles in Urn 2 at 2nd pick
>>
>> # number of cases in which you pick blue in first urn
>> n.blue <- rbinom(1, nreps, nb1 / n1)
>>
>> n.blue.1 <- rbinom(1, nreps - n.blue, nb2 / n2)
>> n.blue.2 <- rbinom(1, n.blue, (nb2+1) / n2)
>>
>> (n.blue.1 + n.blue.2) / nreps
>> }
>>
>>> system.time(sim4(100000))
>> user system elapsed
>> 0.000 0.000 0.001
>>> system.time(sim1(100000))
>> user system elapsed
>> 0.904 0.000 0.918
>>
>> Un saludo,
>>
>> Carlos J. Gil Bellosta
>> http://www.datanalytics.com
>>
>> 2013/1/18 Olivier Nuñez <onunez en unex.es>:
>>> Tania,
>>>
>>> aquí se optimiza vectorizando el bucle (ver The Art of R Programming: A Tour
>>> of Statistical Software Design de Norman Matloff)
>>>
>>> sim3 <- function(nreps) {
>>>
>>> nb1 <- 10 # 10 blue marbles in Urn 1
>>> nb2 = 6 # 6 blue marbles orig. in Urn 2
>>> n1 <- 18 # number of marbles in Urn 1 at 1st pick
>>> n2 <- 13 # number of marbles in Urn 2 at 2nd pick
>>> count <- 0 # number of repetitions in which get blue from Urn 2
>>> u <- matrix(c(runif(2*nreps)),nrow=nreps,ncol=2)
>>> cndt <- (u[,1] <= nb1/n1) & (u[,2] <= (nb2+1)/n2) | (u[,1] > nb1/n1) &
>>> (u[,2] <= nb2/n2)
>>> return(mean(cndt)) # est. P(pick blue from Urn 2)
>>> }
>>>
>>> Un saludo. Olivier
>>>
>>> PD: creo que la función que propone Carlos lleva a una estimación sesgada.
>>>
>>>> system.time(sim3(100000))
>>> user system elapsed
>>> 0.039 0.018 0.058
>>>> system.time(sim1(100000))
>>> user system elapsed
>>> 2.002 0.035 2.034
>>>
>>> -- ____________________________________
>>>
>>> Olivier G. Nuñez
>>> Email: onunez en unex.es
>>> http://matematicas.unex.es/~onunez
>>> Tel : +34 663 03 69 09
>>> Departamento de Matemáticas
>>> Universidad de Extremadura
>>>
>>> ____________________________________
>>>
>>>
>>>
>>>
>>>
>>> El 17/01/2013, a las 20:00, Tania Patiño escribió:
>>>
>>>
>>>> nb1 <- 10 # 10 blue marbles in Urn 1
>>>> n1 <- 18 # number of marbles in Urn 1 at 1st pick
>>>> n2 <- 13 # number of marbles in Urn 2 at 2nd pick
>>>
>>>
>>> _______________________________________________
>>> R-help-es mailing list
>>> R-help-es en r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>
>
> --
> ____________________________________
>
>
> Olivier G. Nuñez
> Email: onunez en unex.es
> http://kolmogorov.unex.es/~onunez
> Tel : +34 663 03 69 09
> Departamento de Matemáticas
> Universidad de Extremadura
>
>
> ____________________________________
>
>
>
>
Más información sobre la lista de distribución R-help-es