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?
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.
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
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), ...)
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")