数值格式,使用1e-5代替0.00001。

16 浏览
0 Comments

数值格式,使用1e-5代替0.00001。

我使用read.table函数读取了一个包含数字的文件,例如0.00001。\n但是当我使用write.table函数将它们写回时,这些数字变成了1e-5的形式。\n我该如何保持原来的格式?

0
0 Comments

在处理一些包含科学计数法和显式计数法数字混合的输入时,需要编写自己的解析器来读取这些数字,并跟踪哪些是以哪种格式表示的。事实上,您需要保留这些数字的字符串表示,以便能够精确地写回原来的输入内容。

然而,如果您只想使用一致的显式计数法进行write.table()操作,可以尝试以下方法:

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

0
0 Comments

问题出现的原因是因为在将数据写入文件时,数据的格式被自动转换为科学计数法的形式,而某些软件或数据库可能无法识别科学计数法表示的数字。解决方法是将数据转换为字符串,并在写入文件时使用quote = FALSE参数来保持数据的原始格式。

在这个例子中,可以通过使用format函数将数字转换为字符串,并将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)

需要注意的是,通常情况下我们不需要修改文件中数字的格式。几乎所有的科学软件和电子表格软件都能够理解科学计数法表示的数字,并且提供了数字格式化选项,可以根据需要进行显示。

需要提醒的是,使用quote = FALSE会导致所有的字符列和因子列都不被加上引号。

在这个问题中,作者将csv文件传递给了一个PostgreSQL数据库,而默认的SQL语句无法将科学计数法表示的数字识别为整数。这可能是因为像Circos(circos.ca)这样的软件要求使用非科学计数法的格式。因此,可以推测Perl可能不将科学计数法表示的数字视为整数。

总之,通过将数字转换为字符串并使用quote = FALSE参数,可以解决将科学计数法表示的数字写入文件时格式被改变的问题。这样可以确保数据的原始格式被保留,以便其他软件或数据库能够正确识别和处理这些数字。

0
0 Comments

这个问题的出现是因为在调用write.table函数时,数字格式被默认为科学计数法,即使用1e-5来表示0.00001。为了解决这个问题,可以通过更改scipen选项来改变数字的显示格式。同时需要注意,这样做也会改变在控制台打印数字时的显示格式。下面是解决该问题的方法:

1. 在调用write.table之前更改scipen选项。需要注意的是,这样做会同时改变控制台打印数字的显示格式。

options(scipen=10)
write.table(foo, "foo.txt")
options(scipen=0)  # 恢复默认设置

2. 如果只需要在某一行中使用该格式,并且有多个行,那么需要在问题中明确指出。

# 在问题中指定需要使用的格式

3. 现代的变体是使用withr::with_options(c(scipen = 10), write.table(foo, "foo.txt")来实现。

# 使用with_options函数来设置格式
withr::with_options(c(scipen = 10), write.table(foo, "foo.txt")

通过以上方法,我们可以解决在调用write.table函数时,数字格式被默认为科学计数法的问题。

0