2010-10-20 16 views

Respuesta

15

Usted puede hacer esto mediante la conversión de sus números a cadenas con formato como sea necesario, a continuación, utilizando el argumento quote = FALSE en la llamada a write.table.

dfr <- data.frame(x = 10^(0:15)) 
dfr$y <- format(dfr$x, scientific = FALSE) 
write.table(dfr, file = "test.txt", quote = FALSE) 

Tenga en cuenta que no debería necesitar cambiar el formato de los números en su archivo. Prácticamente cada pieza de software científico y cada hoja de cálculo comprende la notación científica de los números, y también tiene opciones de formato de números para que pueda verlos cómo elija.

+1

Probablemente debería mencionar que el uso de 'quote = FALSE detendrá ** todo ** columnas de caracteres y factores que se citan. –

+2

Estoy pasando archivos csv a una base de datos postgres. El sql predeterminado no reconocerá 1e + 5 como un número entero ... – Rodrigo

+0

Por ejemplo, Circos (http://circos.ca/) requiere un formato no científico. Por lo tanto, supongo, que Perl no considera números científicos como enteros. –

5

Si la entrada es una mezcla de notación científica y números de notación explícitos, entonces usted estará escribiendo su propio analizador para leer los números y hacer un seguimiento de cuáles estaban en qué formatos. De hecho, querrá mantener una representación de cadena de esos números para poder escribir de nuevo exactamente lo que estaba en la entrada.

Sin embargo, si solo quiere write.table() con notación constantemente explícita, intente.

 
    write.table(format(_your_table_here_, scientific=FALSE), ...) 
34

Solo cambiaría la opción scipen antes de llamar al write.table. Tenga en cuenta que esto también cambiará la forma en que se muestran los números al imprimir en la consola.

options(scipen=10) 
write.table(foo, "foo.txt") 
options(scipen=0) # restore the default 
+0

¿Qué pasa si lo necesito solo en una fila, y tengo varios? – skan

+5

@ user425895: Entonces debe especificar eso en su pregunta. –

+1

Variante moderna: 'withr :: with_options (c (scipen = 10), write.table (foo," foo.txt ")'. –

1

bucle For máximo control sobre todas las filas e imprimirlas en un archivo de texto con formato con sprintf

# Find number of rows in data.frame test 
nrows <- dim(test)[1] 

# init a new vector 
mylines <- vector("character",dim(test)[1]) 

# loop over all rows in dataframe 
for(i in 1:nrows){ 
    # Print out exactly the format you want 
    mylines[i] <- sprintf("Line %d: %.2f\t%.2f",1,test[i,"x"],test[i,"y") 
} 

# write lines to file 
writeLines(mylines,"out.txt")