[R-es] Optimizar código

Carlos J. Gil Bellosta cgb en datanalytics.com
Lun Nov 2 21:38:27 CET 2009


Es un "literal". De hecho,

> storage.mode( 1 )
[1] "double"
> storage.mode( 1L )
[1] "integer"

Imagino que hay ciertas ventajas de eficiencia si se fuerza a R a
interpretar un número de una determinada forma para evitar tener que
realizar conversiones internas.

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com

2009/11/2 Luciano Selzer <luciano.selzer en gmail.com>:
> Hola, que tal? Una pregunta que quizá suene de principiante, pero no
> lo vi explicado en ningún libro que leí. Que significa el 0L ó 1L?
> Luciano
>
>
>
> El día 2 de noviembre de 2009 13:59, Carlos J. Gil Bellosta
> <gilbellosta en gmail.com> escribió:
>> Hola, ¿qué tal?
>>
>> Y, abundando en la recomendación de la función rle, si la eficiencia
>> es un criterio crítico, uno siempre puede ver el código de dicha
>> función y extraer de él la parte relevante. En este caso:
>>
>> y <- x[-1L] != x[-n]
>> y <- c(which(y), n)
>> if(  any( diff(c(0L, y) ) > 600 ) ) etc.
>>
>> Un saludo,
>>
>> Carlos J. Gil Bellosta
>> http://www.datanalytics.com
>>
>> El día 2 de noviembre de 2009 14:12, Javier Muñoz
>> <javimunozlara en gmail.com> escribió:
>>> Hola Luciano.
>>>
>>> Mira la función 'rle'.
>>>
>>> Creo que te debería servir.
>>>
>>> Un saludo.
>>>
>>> Javier Muñoz.
>>>
>>> 2009/11/2 Luciano Selzer <luciano.selzer en gmail.com>
>>>
>>>> Hola lista, tengo una base de datos muy grande de un datalogger.
>>>> Consiste en un vector con 0's y 1's, y tengo que ver cuando hay 600 o
>>>> más unos seguidos. Se me ocurrió hacerlo con un loop for. Pero tarda
>>>> demasiado. También intente usar which para que seleccione solo los 1
>>>> para empezar a sumar pero no hay gran diferencia. A alguien se le
>>>> ocurre alguna solución para hacerlo más rápido?
>>>>
>>>> Acá está el código con los datos de prueba:
>>>>
>>>>
>>>> test<-rep(c(rep(0,5),rep(1,601),rep(0,100),rep(1,100),rep(0,3),rep(1,200),rep(0,300),rep(1,1000)),100)
>>>> loop<-numeric()
>>>> for (i in 1:length(test)) {
>>>>    loop[i]<-sum(test[i:(i+600)])
>>>>    }
>>>>
>>>> loop2<-numeric()
>>>> for (i in which(test==1)) {
>>>>    loop2[i]<-sum(test[i:(i+600)])
>>>> }
>>>>
>>>>
>>>>
>>>> Muchas gracias a todos los que contesten.
>>>> Luciano
>>>>
>>>> _______________________________________________
>>>> R-help-es mailing list
>>>> R-help-es en r-project.org
>>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>>>
>>>
>>>        [[alternative HTML version deleted]]
>>>
>>>
>>> _______________________________________________
>>> R-help-es mailing list
>>> R-help-es en r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>>
>>>
>>
>



Más información sobre la lista de distribución R-help-es