函数write()与数字表示法不一致

函数write()与数字表示法不一致,r,formatting,scientific-notation,R,Formatting,Scientific Notation,考虑以下脚本: list_of_numbers <- as.numeric() for(i in 1001999498:1002000501){ list_of_numbers <- c(list_of_numbers, i) } write(list_of_numbers, file = "./list_of_numbers", ncolumns = 1) 我还发现了另外两个范围,其中R不能一致地打印数字格式 现在我有以下问题: 这是一个bug还是这种行为的真正原因? 为什么

考虑以下脚本:

list_of_numbers <- as.numeric()
for(i in 1001999498:1002000501){
  list_of_numbers <- c(list_of_numbers, i)
}
write(list_of_numbers, file = "./list_of_numbers", ncolumns = 1)
我还发现了另外两个范围,其中R不能一致地打印数字格式

现在我有以下问题:

这是一个bug还是这种行为的真正原因? 为什么只是在一定范围内,为什么不是x以上的每个数字

我知道如何解决这个问题:

[user@pc ~]$ cat list_of_numbers
1001999498
1001999499
1.002e+09
...
1.002e+09
1.002e+09
1.002e+09
1002000501
options(scipen = 1000)

但还有比设定全球选项更优雅的方式吗?无需将其转换为数据帧并更改格式。

这不是错误,R选择最短的表示形式

更准确地说,在?选项中可以阅读:

除非超过scipen,否则优先使用固定符号 数字更宽

因此,当scipen默认值为0时,首选最短的表示法

请注意,可以使用formatx,scientific=TRUE获得数字x的科学表示法

就你而言:

1001999499的长度为10个字符,而其科学符号1.001999e+09的长度为12个字符,因此保留十进制符号。 1001999500:科学记数法为1.002e+09,较短。 ..................... 科学符号保持等于1.002e+09,因此更短 1002000501:1.002001e+09更长。 你可能会问:为什么1001999500的格式是1.002e+09而不是1.0019995e+09?这仅仅是因为还有一个控制有效位数的选项。它命名为digits,默认值为7。由于1.0019995有8个有效数字,因此将其四舍五入为1.002

确保保留十进制表示法而不更改全局选项的最简单方法可能是使用格式:

旁注:你不需要一个循环来生成你的数字列表,顺便说一下,它不是一个列表,而是一个向量。只需使用:

list_of_numbers <- as.numeric(1001999498:1002000501)
list_of_numbers <- as.numeric(1001999498:1002000501)