web-dev-qa-db-fra.com

Format numérique, écrit 1e-5 au lieu de 0,00001

J'ai utilisé read.table pour lire un fichier contenant des nombres tels que 0,00001

quand je les réécris avec write.table ces nombres apparaissent sous la forme 1e-5

Comment conserver l'ancien format?

24
skan

Vous pouvez le faire en convertissant vos nombres en chaînes avec une mise en forme selon vos besoins, puis en utilisant l'argument quote = FALSE dans l'appel à write.table.

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

Notez que vous ne devriez pas avoir besoin de changer le format des nombres dans votre fichier. Presque tous les logiciels et toutes les feuilles de calcul comprennent la notation scientifique des nombres et disposent également d'options de formatage des nombres pour que vous puissiez les visualiser comme vous le souhaitez.

18
Richie Cotton

Je voudrais juste changer l'option scipen avant d'appeler write.table. Notez que cela changera également la façon dont les nombres sont affichés lors de l'impression sur la console.

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

Si l'entrée est un mélange de notation scientifique et de nombres de notation explicites, vous écrirez votre propre analyseur pour lire les nombres et garder une trace de ceux qui étaient dans quels formats. En fait, vous voudrez garder une représentation sous forme de chaîne de ces nombres qui traînent afin que vous puissiez réécrire exactement ce qui était dans l'entrée.

Cependant, si vous voulez simplement écrire write.table () avec une notation explicitement cohérente, essayez.

 table.écriture (format (_votre_table_ici_, scientifique = FAUX), ...) 
5
Eric Towers

Pour une boucle de contrôle maximale sur toutes les lignes et imprimez-les dans un fichier texte formaté avec 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")
1
Henrik