Числовой формат с записью 1e-5 вместо 0,00001 - PullRequest
24 голосов
/ 20 октября 2010

Я использовал read.table, чтобы прочитать файл, содержащий числа, такие как 0,00001

, когда я записываю их обратно с write.table, эти цифры отображаются как 1e-5

Как можноЯ сохраняю старый формат?

Ответы [ 4 ]

38 голосов
/ 20 октября 2010

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

options(scipen=10)
write.table(foo, "foo.txt")
options(scipen=0)  # restore the default
18 голосов
/ 20 октября 2010

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

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

5 голосов
/ 20 октября 2010

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

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

    write.table(format(_your_table_here_, scientific=FALSE), ...)
1 голос
/ 23 октября 2010

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