Hola: El write y el write.table me están ralentizando bastante el proceso de volcado en fichero ASCII. ¿Conocéis algún modo más rápido de hacerlo?. El sink() no me sirve, pues no me permite controlar la presentación de los datos en el fichero (p.e. tabulaciones, línea de separación, etc.). Gracias! Un saludo Eva Prieto Castro [[alternative HTML version deleted]]
Estimada Eva Si la lectura del archivo es lenta, debe tener muchos datos, no se si es buena idea aumentar la velocidad de lectura, posiblemente es preferible invertir tiempo en la incorporación de datos de forma tal que aceleren el procesamiento numérico, al respecto solo puedo comentarle que no hace mucho, en esta lista colocaron un link a un grupo de usuarios españoles que se reunieron en su ciudad, en dicho encuentro grabaron un video donde exponen el trabajo con muchos datos (gigas). Javier -----Mensaje original----- From: Eva Prieto Castro Sent: Sunday, April 22, 2012 3:39 PM To: r-help-es en r-project.org Subject: [R-es] Write y write.table Hola: El write y el write.table me están ralentizando bastante el proceso de volcado en fichero ASCII. ¿Conocéis algún modo más rápido de hacerlo?. El sink() no me sirve, pues no me permite controlar la presentación de los datos en el fichero (p.e. tabulaciones, línea de separación, etc.). Gracias! Un saludo Eva Prieto Castro [[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
Hola, Mira las opciones y recomendaciones que aparecen en la función "connections()", está en la propia librería base. Saludos, Carlos Ortega www.qualityexcellence.es El 22 de abril de 2012 20:39, Eva Prieto Castro <evapcastro@yahoo.es>escribió:> Hola: > > El write y el write.table me están ralentizando bastante el proceso de > volcado en fichero ASCII. ¿Conocéis algún modo más rápido de hacerlo?. > > El sink() no me sirve, pues no me permite controlar la presentación de los > datos en el fichero (p.e. tabulaciones, línea de separación, etc.). > > Gracias! > > Un saludo > Eva Prieto Castro > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
El 22/04/2012 19:40, "Eva Prieto Castro" <evapcastro@yahoo.es> escribió:> > Hola: > > El write y el write.table me están ralentizando bastante el proceso devolcado en fichero ASCII. ¿Conocéis algún modo más rápido de hacerlo?.>Intuyo que la lentitud se debe a que estás haciendo mucho trabajo de apertura/escritura de fichero. Creo que conseguirás más velocidad si compones primero la salida completa en R (trabajando con la memoria) construyendo un objeto "character" que aglutine lo que necesites, y finalmente lo escribas al fichero de una sola vez. Oscar. [[alternative HTML version deleted]]
Gracias a los tres. Oscar, por favor, ¿podrías ampliarme esa información?. Yo tengo varios dataframes con datos que debo volcar en el fichero de resultados, pero adecuando la presentación; es decir, debo indicar el título de cada tabla, indicar los nombres de las columnas (a poder ser con una línea separadora por encima y otra por debajo) y a continuación los datos del dataframe, de manera tabulada; todo ello para cada uno de los 3 dataframes. Un saludo. Eva Prieto Castro --- El dom, 22/4/12, Oscar Perpiñan <oscar.perpinan@gmail.com> escribió: De: Oscar Perpiñan <oscar.perpinan@gmail.com> Asunto: Re: [R-es] Write y write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: r-help-es@r-project.org Fecha: domingo, 22 de abril, 2012 21:53 El 22/04/2012 19:40, "Eva Prieto Castro" <evapcastro@yahoo.es> escribió:> > Hola: > > El write y el write.table me están ralentizando bastante el proceso de volcado en fichero ASCII. ¿Conocéis algún modo más rápido de hacerlo?. >Intuyo que la lentitud se debe a que estás haciendo mucho trabajo de apertura/escritura de fichero. Creo que conseguirás más velocidad si compones primero la salida completa en R (trabajando con la memoria) construyendo un objeto "character" que aglutine lo que necesites, y finalmente lo escribas al fichero de una sola vez. Oscar. [[alternative HTML version deleted]]
Hola, Mira este ejemplo: ################################# Lines <- "DeployID Date.Time LocationQuality Latitude Longitude STM05-1 2005/02/28 17:35 Good -35.562 177.158 STM05-1 2005/02/28 19:44 Good -35.487 177.129 STM05-1 2005/02/28 23:01 Unknown -35.399 177.064 STM05-1 2005/03/01 07:28 Unknown -34.978 177.268 STM05-1 2005/03/01 18:06 Poor -34.799 177.027 STM05-1 2005/03/01 18:47 Poor -34.85 177.059 STM05-2 2005/02/28 12:49 Good -35.928 177.328 STM05-2 2005/02/28 21:23 Poor -35.926 177.314 " DF <- read.table(textConnection(Lines), skip = 1, as.is = TRUE, sep="\t", col.names = c("Id", "Date", "Time", "Quality", "Lat", "Long")) lin.v<-paste0(as.character(DF[1,]), sep="\t") lin2.v<-paste(as.character(DF[1,]), sep="\t") lin.v lin2.v nchar(lin.v, type=''chars'') nchar(lin2.v, type=''chars'') ################################# Los campos de Lines, están separados por "\t". El resultado sobre el número de caracteres para la primera línea es este:> lin.v<-paste0(as.character(DF[1,]), sep="\t")> lin2.v<-paste(as.character(DF[1,]), sep="\t")> lin.v[1] "STM05-1\t" "2005/02/28\t" "17:35\t"[4] "Good\t" "-35.562\t" "177.158\t" > lin2.v[1] "STM05-1" "2005/02/28" "17:35" "Good" [5] "-35.562" "177.158" > nchar(lin.v, type=''chars'')[1] 8 11 6 5 8 8> nchar(lin2.v, type=''chars'')[1] 7 10 5 4 7 7 Vaya, el "\t" introduce un carácter nuevo. Sumando la salida de nchar(), tienes la longitud total de la cadena, pero juntándolo con paste0() Saludos, Carlos Ortega www.qualityexcellence.es El 25 de abril de 2012 12:41, Eva Prieto Castro <evapcastro@yahoo.es>escribió:> Hola: > > En un intento de adaptar a mis necesidades las instrucciones de Oscar, me > surge la siguiente duda: > > Si tengo ésto, > > write.table(x, file=“x.txt”, sep=“\t” ), > > donde x es un data.frame, > > ¿Cómo puedo saber a priori (antes de hacer el write.table) la longitud que > va a tener cada fila en el fichero como consecuencia de la tabulación?. > Necesito esa longitud para dibujar una línea separadora entre los nombres > de las columnas y los datos insertados con ese write.table. > > Gracias. > > Eva Prieto Castro > > --- El lun, 23/4/12, Oscar Perpiñán Lamigueiro <oscar.perpinan@gmail.com> > escribió: > > > De: Oscar Perpiñán Lamigueiro <oscar.perpinan@gmail.com> > Asunto: Re: [R-es] Write y write.table > Para: "Eva Prieto Castro" <evapcastro@yahoo.es> > CC: r-help-es@r-project.org > Fecha: lunes, 23 de abril, 2012 12:31 > > > > On dom 22 abr 2012 23:29:39 CEST, Eva Prieto Castro wrote: > > > Gracias a los tres. > > > > Oscar, por favor, ¿podrías ampliarme esa información?. Yo tengo varios > dataframes con datos que debo volcar en el fichero de resultados, pero > adecuando la presentación; es decir, debo indicar el título de cada tabla, > indicar los nombres de las columnas (a poder ser con una línea separadora > por encima y otra por debajo) y a continuación los datos del dataframe, de > manera tabulada; todo ello para cada uno de los 3 dataframes. > Hola, > > Con lo que intuyo que intentas conseguir, se me ocurre un ejemplo sencillo > que puedes adaptar a lo que tú necesites: > > x <- 1:4 > > xchar <- paste(x, collapse='' '') > > xchar > [1] "1 2 3 4" > > sep <- rep(''_'', nchar(xchar)) > > sep > [1] "_" "_" "_" "_" "_" "_" "_" > > sepchar <- paste(sep, collapse='''') > > sepchar > [1] "_______" > > obj <- paste(xchar, sepchar, xchar, sepchar, sep=''\n'') > > obj > [1] "1 2 3 4\n_______\n1 2 3 4\n_______" > > cat(obj, file=''obj.txt'') > > Saludos > > Oscar. > > > > > --- El dom, 22/4/12, Oscar Perpiñan <oscar.perpinan@gmail.com> escribió: > > > > > > De: Oscar Perpiñan <oscar.perpinan@gmail.com> > > Asunto: Re: [R-es] Write y write.table > > Para: "Eva Prieto Castro" <evapcastro@yahoo.es> > > CC: r-help-es@r-project.org > > Fecha: domingo, 22 de abril, 2012 21:53 > > > > > > > > > > El 22/04/2012 19:40, "Eva Prieto Castro" <evapcastro@yahoo.es> escribió: > > > > > > Hola: > > > > > > El write y el write.table me están ralentizando bastante el proceso de > volcado en fichero ASCII. ¿Conocéis algún modo más rápido de hacerlo?. > > > > > Intuyo que la lentitud se debe a que estás haciendo mucho trabajo de > apertura/escritura de fichero. Creo que conseguirás más velocidad si > compones primero la salida completa en R (trabajando con la memoria) > construyendo un objeto "character" que aglutine lo que necesites, y > finalmente lo escribas al fichero de una sola vez. > > Oscar. > > -- > Oscar Perpiñán Lamigueiro > Dpto. Ingeniería Eléctrica > EUITI-UPM > URL: http://procomun.wordpress.com > Twitter: @oscarperpinan > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Hola, Carlos: Gracias. Eso lo he probado (paste0), pero me convierte a "1" todos los valores de mi fila del dataframe. Estoy intentando averiguar por qu sucede eso... Un saludo Eva Prieto Castro --- El mi, 25/4/12, Carlos Ortega <cof@qualityexcellence.es> escribi: De: Carlos Ortega <cof@qualityexcellence.es> Asunto: Re: [R-es] Write y write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: r-help-es@r-project.org Fecha: mircoles, 25 de abril, 2012 13:13 Hola, Mira este ejemplo: ################################# Lines <- "DeployID Date.Time LocationQuality Latitude Longitude STM05-1 2005/02/28 17:35 Good -35.562 177.158 STM05-1 2005/02/28 19:44 Good -35.487 177.129 STM05-1 2005/02/28 23:01 Unknown -35.399 177.064 STM05-1 2005/03/01 07:28 Unknown -34.978 177.268 STM05-1 2005/03/01 18:06 Poor -34.799 177.027 STM05-1 2005/03/01 18:47 Poor -34.85 177.059 STM05-2 2005/02/28 12:49 Good -35.928 177.328 STM05-2 2005/02/28 21:23 Poor -35.926 177.314 " DF <- read.table(textConnection(Lines), skip = 1, as.is = TRUE, sep="\t", col.names = c("Id", "Date", "Time", "Quality", "Lat", "Long")) lin.v<-paste0(as.character(DF[1,]), sep="\t") lin2.v<-paste(as.character(DF[1,]), sep="\t") lin.v lin2.v nchar(lin.v, type=''chars'') nchar(lin2.v, type=''chars'') ################################# Los campos de Lines, estn separados por "\t". El resultado sobre el nmero de caracteres para la primera lnea es este:> lin.v<-paste0(as.character(DF[1,]), sep="\t") > lin2.v<-paste(as.character(DF[1,]), sep="\t") > lin.v[1] "STM05-1\t" "2005/02/28\t" "17:35\t" [4] "Good\t" "-35.562\t" "177.158\t"> lin2.v[1] "STM05-1" "2005/02/28" "17:35" "Good" [5] "-35.562" "177.158"> nchar(lin.v, type=''chars'')[1] 8 11 6 5 8 8> nchar(lin2.v, type=''chars'')[1] 7 10 5 4 7 7 Vaya, el "\t" introduce un carcter nuevo. Sumando la salida de nchar(), tienes la longitud total de la cadena, pero juntndolo con paste0() Saludos, Carlos Ortega www.qualityexcellence.es bi: Hola: En un intento de adaptar a mis necesidades las instrucciones de Oscar, me surge la siguiente duda: Si tengo sto, write.table(x, file=x.txt, sep=\t ), donde x es un data.frame, Cmo puedo saber a priori (antes de hacer el write.table) la longitud que va a tener cada fila en el fichero como consecuencia de la tabulacin?. Necesito esa longitud para dibujar una lnea separadora entre los nombres de las columnas y los datos insertados con ese write.table. Gracias. Eva Prieto Castro --- El lun, 23/4/12, Oscar Perpin Lamigueiro <oscar.perpinan@gmail.com> escribi: De: Oscar Perpin Lamigueiro <oscar.perpinan@gmail.com> Asunto: Re: [R-es] Write y write.table CC: r-help-es@r-project.org Fecha: lunes, 23 de abril, 2012 12:31 On dom 22 abr 2012 23:29:39 CEST, Eva Prieto Castro wrote:> Gracias a los tres. > > Oscar, por favor, podras ampliarme esa informacin?. Yo tengo varios dataframes con datos que debo volcar en el fichero de resultados, pero adecuando la presentacin; es decir, debo indicar el ttulo de cada tabla, indicar los nombres de las columnas (a poder ser con una lnea separadora por encima y otra por debajo) y a continuacin los datos del dataframe, de manera tabulada; todo ello para cada uno de los 3 dataframes.Hola, Con lo que intuyo que intentas conseguir, se me ocurre un ejemplo sencillo que puedes adaptar a lo que t necesites:> x <- 1:4 > xchar <- paste(x, collapse='' '') > xchar[1] "1 2 3 4"> sep <- rep(''_'', nchar(xchar)) > sep[1] "_" "_" "_" "_" "_" "_" "_"> sepchar <- paste(sep, collapse='''') > sepchar[1] "_______"> obj <- paste(xchar, sepchar, xchar, sepchar, sep=''\n'') > obj[1] "1 2 3 4\n_______\n1 2 3 4\n_______"> cat(obj, file=''obj.txt'')Saludos Oscar.> > --- El dom, 22/4/12, Oscar Perpian <oscar.perpinan@gmail.com> escribi: > > > De: Oscar Perpian <oscar.perpinan@gmail.com> > Asunto: Re: [R-es] Write y write.table> CC: r-help-es@r-project.org > Fecha: domingo, 22 de abril, 2012 21:53 > > > >:> > > > Hola: > > > > El write y el write.table me estn ralentizando bastante el proceso de volcado en fichero ASCII. Conocis algn modo ms rpido de hacerlo?. > > > Intuyo que la lentitud se debe a que ests haciendo mucho trabajo de apertura/escritura de fichero. Creo que conseguirs ms velocidad si compones primero la salida completa en R (trabajando con la memoria) construyendo un objeto "character" que aglutine lo que necesites, y finalmente lo escribas al fichero de una sola vez. > Oscar.-- Oscar Perpin Lamigueiro Dpto. Ingeniera Elctrica EUITI-UPM URL: http://procomun.wordpress.com Twitter: @oscarperpinan [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es -- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]