[R-es] Optimizar paste0()?

Carlos J. Gil Bellosta cgb en datanalytics.com
Mar Dic 9 17:31:54 CET 2014


Hola, ¿qué tal?

Algunos números:

> a <- sample(letters, 70e6, replace = T)
> b <- sample(letters, 70e6, replace = T)

> system.time(a.b <- paste0(a, b))
   user  system elapsed
 17.289   0.264  17.552

> b <- sample(1:100, 70e6, replace = T)
> system.time(a.b <- paste0(a, b))
   user  system elapsed
 48.875   0.632  49.506
> system.time(a.b <- paste0(a, as.character(b)))
   user  system elapsed
 48.255   0.588  48.842

Por debajo del minuto. Pero con 24GB de RAM, que es, diría, el factor
limitante. De hecho,

> object.size(a.b)
560124840 bytes

que es alrededor de medio GB.

Un saludo,

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



El día 9 de diciembre de 2014, 17:12, "Marcuzzi, Javier Rubén"
<javier.ruben.marcuzzi en gmail.com> escribió:
> Jorge
>
> Creo que la opción de Carlos Ortega es mejor, si no recuerdo mal una vez
> vi una demostración sobre bigdata en la cual data.table tenía una
> performance que sorprendía sobre otras alternativas.
>
> Javier Marcuzzi
>
>
> El 09/12/2014 a las 12:35 p.m., Carlos Ortega escibió:
>> Hola,
>>
>> Otra forma, quizás algo más rápida, especialmente para unos conjuntos
>> tan grandes, que la de sqldf es "data.table":
>>
>> library(data.table)
>> x <- 1:3
>> y <- 4:6
>> d <- data.table(x, y)
>> d[,z := paste(x,"-",y,sep="")]
>>
>> > d
>>    x y   z
>> 1: 1 4 1-4
>> 2: 2 5 2-5
>> 3: 3 6 3-6
>>
>> Y bueno, "dplyr" también es otra opción muy rápida...
>> También, y recuerdo que hace tiempo también lo llegamos a hablar,
>> existe la posibilidad de juntar las dos variables por fuera ejecutando
>> un comando en la shell del Sistema Operativo (supongo que es
>> Uniux/Linux)con "system()".
>>
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es <http://www.qualityexcellence.es>
>>
>> Saludos,
>> Carlos Ortega
>>
>>
>> El 9 de diciembre de 2014, 14:13, "Marcuzzi, Javier Rubén"
>> <javier.ruben.marcuzzi en gmail.com
>> <mailto:javier.ruben.marcuzzi en gmail.com>> escribió:
>>
>>     Mejor
>>     sqldf("select x, y, x || ':' || y || '-ABC' as z from d")
>>
>>     El 09/12/2014 a las 09:55 a.m., Jorge I Velez escibió:
>>     > Gracias, Javier.
>>     >
>>     > Los datos "d" corresponden un archivo de texto de ~1.92GB.   Voy a
>>     > explorar la posibilidad con sqldf, aunque confieso que mi
>>     conocimiento
>>     > de SQL es bastante limitado.
>>     >
>>     > Saludos cordiales,
>>     > Jorge.-
>>     >
>>     >
>>     > 2014-12-09 23:50 GMT+11:00 "Marcuzzi, Javier Rubén"
>>     > <javier.ruben.marcuzzi en gmail.com
>>     <mailto:javier.ruben.marcuzzi en gmail.com>
>>     > <mailto:javier.ruben.marcuzzi en gmail.com
>>     <mailto:javier.ruben.marcuzzi en gmail.com>>>:
>>     >
>>     >     Estimado Jorge Velez
>>     >
>>     >     ¿Que pasa si usa sqldf que trabaja con sqlite o alguna
>>     conección a
>>     >     base de datos y realiza una concateneción en sql?
>>     >
>>     >     Javier Marcuzzi
>>     >
>>     >     El 09/12/2014 a las 09:46 a.m., Jorge I Velez escibió:
>>     >
>>     >         Hola a todos,
>>     >
>>     >         Me gustaria construir un vector a partir de otros dos.
>>     >
>>     >         Ejemplo:
>>     >
>>     >         x <- 1:3
>>     >         y <- 4:6
>>     >         d <- data.frame(x, y)
>>     >         d$z <- with(d, paste0(x, ":", y, "-ABC"))
>>     >         d
>>     >
>>     >         El problema es "d" tiene ~70 millones de filas y toma
>>     mucho tiempo
>>     >         construir el vector "z".
>>     >         Alguna sugerencia?
>>     >
>>     >         Muchas gracias,
>>     >         Jorge Velez
>>     >
>>     >                 [[alternative HTML version deleted]]
>>     >
>>     >  _______________________________________________
>>     >         R-help-es mailing list
>>     > R-help-es en r-project.org <mailto:R-help-es en r-project.org>
>>     <mailto:R-help-es en r-project.org <mailto:R-help-es en r-project.org>>
>>     >https://stat.ethz.ch/mailman/listinfo/r-help-es
>>     >
>>     >
>>     >     _______________________________________________
>>     >     R-help-es mailing list
>>     > R-help-es en r-project.org <mailto:R-help-es en r-project.org>
>>     <mailto:R-help-es en r-project.org <mailto: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 <mailto:R-help-es en r-project.org>
>>     https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>>
>>
>>
>> --
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es <http://www.qualityexcellence.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