2010-10-20 4 views

Antwort

15

Sie können dies tun, indem Sie Ihre Zahlen in Strings mit Formatierung konvertieren, wie Sie benötigen, dann mit dem Argument quote = FALSE im Aufruf von write.table.

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

Beachten Sie, dass Sie das Format der Zahlen in Ihrer Datei nicht ändern müssen. So ziemlich jede wissenschaftliche Software und jede Tabellenkalkulation versteht die wissenschaftliche Notation für Zahlen und bietet auch Möglichkeiten zur Zahlenformatierung, so dass Sie sie sehen können, wie Sie sich entscheiden.

+1

ich wahrscheinlich formatiert ausdrucken sollte erwähnen, dass 'quote = false' mit stoppt ** alle ** Zeichen- und Faktorspalten werden zitiert. –

+2

Ich übermittle CSV-Dateien an eine Postgres-Datenbank. Der Standardwert sql erkennt 1e + 5 nicht als Integer ... – Rodrigo

+0

Zum Beispiel erfordert Circos (http://circos.ca/) eine nicht-wissenschaftliche Formatierung. Daher würde ich vermuten, dass Perl wissenschaftliche Zahlen nicht als ganze Zahlen betrachtet. –

5

Wenn die Eingabe eine Mischung aus wissenschaftlicher Notation und expliziten Notationsnummern ist, dann schreiben Sie Ihren eigenen Parser, um die Zahlen einzulesen und zu verfolgen, welche in welchen Formaten waren. In der Tat, Sie wollen eine Zeichenfolge Darstellung dieser Zahlen herum zu halten, so können Sie genau was in der Eingabe war.

Wenn Sie jedoch nur write.table() mit konsistent expliziter Schreibweise schreiben möchten, versuchen Sie es.

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

Ich würde nur die scipen Option vor dem Aufruf write.table ändern. Beachten Sie, dass sich dadurch auch die Anzeige von Zahlen beim Drucken auf der Konsole ändert.

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

Was, wenn ich es nur in einer Reihe brauche, und ich habe mehrere? – skan

+5

@ user425895: Dann müssen Sie das in Ihrer Frage angeben. –

+1

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

1

Für maximale Kontrolle Schleife über alle Zeilen und sie in eine Textdatei mit 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")