Формат номера, запись 1e-5 вместо 0,00001

Я использовал read.table для чтения файла, который содержит числа, такие как 0.00001

когда я пишу их с помощью write.table, эти числа отображаются как 1e-5

Как сохранить старый формат?

Ответ 1

Вы можете сделать это, преобразовывая свои номера в строки с форматированием по мере необходимости, а затем используя аргумент 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)

Обратите внимание, что вам не нужно изменять формат номеров в вашем файле. Практически каждая научная программа и каждая электронная таблица понимают научную нотацию для чисел, а также имеют опции форматирования номера, чтобы вы могли просматривать их, как вы выбираете.

Ответ 2

Я бы просто изменил параметр scipen перед вызовом write.table. Обратите внимание, что это также изменит количество отображаемых номеров при печати на консоль.

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

Ответ 3

Если вход представляет собой смесь научной нотации и явных номеров нотации, вы будете писать собственный парсер для чтения в числах и отслеживать, какие из них были в каких форматах. Фактически, вы захотите сохранить строковое представление этих чисел, лежащих вокруг, чтобы вы могли точно написать, что было во входном файле.

Однако, если вы просто хотите write.table() с последовательно явным обозначением, попробуйте.

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

Ответ 4

Для максимального цикла управления по всем строкам и печати их в текстовый файл, отформатированный с помощью 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")