Я использовал read.table
для чтения файла, который содержит числа, такие как 0.00001
когда я пишу их с помощью write.table
, эти числа отображаются как 1e-5
Как сохранить старый формат?
Я использовал read.table
для чтения файла, который содержит числа, такие как 0.00001
когда я пишу их с помощью write.table
, эти числа отображаются как 1e-5
Как сохранить старый формат?
Вы можете сделать это, преобразовывая свои номера в строки с форматированием по мере необходимости, а затем используя аргумент quote = FALSE
в вызове write.table
.
dfr <- data.frame(x = 10^(0:15))
dfr$y <- format(dfr$x, scientific = FALSE)
write.table(dfr, file = "test.txt", quote = FALSE)
Обратите внимание, что вам не нужно изменять формат номеров в вашем файле. Практически каждая научная программа и каждая электронная таблица понимают научную нотацию для чисел, а также имеют опции форматирования номера, чтобы вы могли просматривать их, как вы выбираете.
Я бы просто изменил параметр scipen
перед вызовом write.table
. Обратите внимание, что это также изменит количество отображаемых номеров при печати на консоль.
options(scipen=10)
write.table(foo, "foo.txt")
options(scipen=0) # restore the default
Если вход представляет собой смесь научной нотации и явных номеров нотации, вы будете писать собственный парсер для чтения в числах и отслеживать, какие из них были в каких форматах. Фактически, вы захотите сохранить строковое представление этих чисел, лежащих вокруг, чтобы вы могли точно написать, что было во входном файле.
Однако, если вы просто хотите write.table() с последовательно явным обозначением, попробуйте.
write.table(format(_your_table_here_, scientific=FALSE), ...)
Для максимального цикла управления по всем строкам и печати их в текстовый файл, отформатированный с помощью 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")