Gracias, Carlos. El problema es que según ese mecanismo la tabulación se contabiliza como 1 caracter, y cuando vuelco el data.frame en fichero con write.table, la longitud de la fila es superior a la que sale según ese cálculo. ¿Comprendes?. Es como si necesitase saber a priori (antes de hacer el write.table) lo que va a dar de sí el data.frame.
 
Por más vueltas que le doy no se me ocurre cómo resolver.
 
Eva

--- El lun, 30/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió:


De: Carlos Ortega <cof@qualityexcellence.es>
Asunto: Re: [R-es] Líneas al hacer write.table
Para: "Eva Prieto Castro" <evapcastro@yahoo.es>
CC: R-help-es@r-project.org
Fecha: lunes, 30 de abril, 2012 18:03


Hola,


Con paste0() sí que se puede construir...
Mira este código.






> options(stringsAsFactors = FALSE)
> miLista <- list("Sujeto1", "Parametro1", 24, 26.5)
> d<-as.data.frame(miLista);d;
  X.Sujeto1. X.Parametro1. X24 X26.5
1    Sujeto1    Parametro1  24  26.5
> lin.con<-paste0(d, sep="\t")
> lin.sin<-paste0(d, sep="")
> lin.con; lin.sin
[1] "Sujeto1\t"    "Parametro1\t" "24\t"        
[4] "26.5\t"      
[1] "Sujeto1"    "Parametro1" "24"         "26.5"      
> con.t<-nchar(lin.con)
> sin.t<-nchar(lin.sin)
> con.t; sin.t
[1]  8 11  3  5
[1]  7 10  2  4
> sum(con.t);sum(sin.t)
[1] 27
[1] 23
> 
> lin.con.good<-sum(con.t)-1
> lin.con.good
[1] 26









> 




Con paste0() introduces un "\t" al final de cada elemento de cada columna. Por tanto al contar el total de caracteres "reales" de una línea habrá que descontar uno (el último tabulador) que se coloca al final del último elemento de la fila.


La longitud "buena" de la línea es lin.con.good....


Saludos,
Carlos Ortega
www.qualityexcellence.es
P.S: Una curiosidad, ¿eres Ana o eres Eva?...


El 30 de abril de 2012 17:36, Eva Prieto Castro <evapcastro@yahoo.es> escribió:






Gracias, Carlos!
 
Dando un paso más, me interesaría que ese paste tuviera en cuenta las tabulaciones, para que la longitud de la línea sea fiable y al quedar dibujada alcance hasta el final de la fila mostrada.
 
Para lograrlo, he intentado hacer paste(d, collapse="\t"), y también paste(d, sep="\t") pero no logro la longitud real que ocupa la fila al volcarla con:
 
 write.table(d,file="tabla2.txt", append=TRUE, quote=FALSE, sep="\t",row.names=FALSE, col.names=FALSE)
 
¿Se os ocurre alguna idea?.
 
Mil gracias.
 
Eva
--- El lun, 30/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió:



De: Carlos Ortega <cof@qualityexcellence.es>
Asunto: Re: [R-es] Líneas al hacer write.table
Para: "Eva Prieto Castro" <evapcastro@yahoo.es>
CC: R-help-es@r-project.org
Fecha: lunes, 30 de abril, 2012 10:22




Hola, 


De esta forma sí que funciona:






> options(stringsAsFactors = FALSE)
> miLista <- list("Sujeto1", "Parametro1", 24, 26.5)
> d<-as.data.frame(miLista);d;
  X.Sujeto1. X.Parametro1. X24 X26.5
1    Sujeto1    Parametro1  24  26.5
> paste(d)
[1] "Sujeto1"    "Parametro1" "24"         "26.5"      









>


Saludos,
Carlos Ortega
www.qualityexcellence.es


El 30 de abril de 2012 06:54, Eva Prieto Castro <evapcastro@yahoo.es> escribió:






Hola, Carlos:
 
Os indico un ejemplo básico referido a mi problema:
 
> miLista <- list("Sujeto1", "Parametro1", 24, 26.5)
> miLista
[[1]]
[1] "Sujeto1"
[[2]]
[1] "Parametro1"
[[3]]
[1] 24
[[4]]
[1] 26.5
> d<-data.frame(miLista)
> d
  X.Sujeto1. X.Parametro1. X24 X26.5
1    Sujeto1    Parametro1  24  26.5
> paste(d)
[1] "1"    "1"    "24"   "26.5"

Un saludo
 
Eva

--- El vie, 27/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió:



De: Carlos Ortega <cof@qualityexcellence.es>
Asunto: Re: [R-es] Líneas al hacer write.table
Para: "Eva Prieto Castro" <evapcastro@yahoo.es>
CC: R-help-es@r-project.org
Fecha: viernes, 27 de abril, 2012 09:28 





Hola Eva,


Gracias.
¿Puedes pasarnos un par de líneas de ese data.frame para ver qué es lo que produce que cuando utilizas as.character() se conviertan en "1"?


Seguramente encontremos otra forma de contar el número de caracteres evitando ese error.


Gracias,
Carlos Ortega
www.qualityexcellence.es


El 27 de abril de 2012 07:02, Eva Prieto Castro <evapcastro@yahoo.es> escribió:






Hola, Carlos:
 
Lo que necesito es precisamente lo que describes en el primer párrafo. Los datos del data.frame los muestra bien, el problema está en el contaje previo de los caracteres, por causa de ese as.character.
 
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] Líneas al hacer write.table
Para: "Eva Prieto Castro" <evapcastro@yahoo.es>
CC: R-help-es@r-project.org
Fecha: miércoles, 25 de abril, 2012 23:03 




Hola, 


Lo que había entendido es que necesitabas calcular la longitud de toda la fila para poder poner una linea separadora.
Pero una vez calculada la longitud, defines la longitud de la línea y le pasas el control al write.table para que escriba el data.frame en el fichero.


En esa función "contadora" de caracteres, ha de convertir toda la fila a formato "as.character()" de ahí puede venir el error de los "1" que comentas. Por eso no puedes dejar la fila del data.frame convertida as.character antes de escribir en el fichero.


De todas formas, si puedes adjuntar varias líneas del data.frame que estás intentando grabar y el código que utilizas, quizás podamos detectar donde está la anomalía.


Saludos,
Carlos Ortega
www.qualityexcellence.es


El 25 de abril de 2012 18:31, Eva Prieto Castro <evapcastro@yahoo.es> escribió:






 
Hola:
 
¿Cómo puedo conseguir una línea horizontal separadora entre la fila correspondiente a los nombres de las columnas y la primera fila de datos?. ¿Hay algo similar a write.table que lo haga, o hay que hacerlo manualmente escribiendo un paste de "_" con la longitud deseada?. El problema es que el dataframe que vuelco, al hacerle un paste con separador "\t", para saber la longitud que debe tener la línea a dibujar, me convierte (como resultado del paste) a valor "1" cada valor de la fila del dataframe.
 
A ver si me pudierais echar un cable.
 
Gracias
 
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




-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es




-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es




-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]

