数字格式,写入1e-5而不是0.00001

时间:2010-10-20 13:21:18

标签: r numbers format

我使用read.table来读取包含数字的文件,例如0.00001

当我用write.table写回来时,这些数字显示为1e-5

如何保留旧格式?

4 个答案:

答案 0 :(得分:35)

我只需在调用scipen之前更改write.table选项。请注意,这也会更改打印到控制台时数字的显示方式。

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

答案 1 :(得分:17)

您可以根据需要将数字转换为具有格式的字符串,然后在调用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 :(得分:5)

如果输入是科学记数法和显式记法数字的混合,那么您将编写自己的解析器来读取数字并跟踪哪些格式。实际上,您需要保留这些数字的字符串表示,以便您可以回写完全输入中的内容。

但是,如果您只想使用一致的显式表示法编写write.table(),请尝试。

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

答案 3 :(得分:1)

对于所有行的最大控制循环并将其打印到使用 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")