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

ska*_*kan 25 format numbers r

我曾经read.table读过一个包含0.00001等数字的文件

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

我怎样才能保留旧格式?

Jos*_*ich 40

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

options(scipen=10)
write.table(foo, "foo.txt")
options(scipen=0)  # restore the default
Run Code Online (Sandbox Code Playgroud)

  • @ user425895:那你需要在你的问题中指明. (6认同)
  • 现代变体:`withr::with_options(c(scipen = 10), write.table(foo, "foo.txt")`。 (2认同)

Ric*_*ton 18

您可以通过将数字转换为具有所需格式的字符串,然后使用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)
Run Code Online (Sandbox Code Playgroud)

请注意,您不需要更改文件中数字的格式.几乎所有科学软件和每个电子表格都能理解数字的科学记数法,并且还有数字格式选项,因此您可以查看它们的选择方式.

  • 我将csv文件传递给postgres数据库.默认的sql不会将1e + 5识别为整数... (2认同)

Eri*_*ers 5

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

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

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