如何规范化 R 中相当长的十进制数?

How to normalize rather long decimal number in R?

我有 data.frame 的列表,我需要在其中对 .score 列进行转换。但是,我为这个转换实现了辅助函数。在我为 data.frame 的输入列表调用 .helperFunc 之后,但我在第一个、第三个 data.frame 中得到了奇怪的 pvalue 格式。如何将相当大的小数标准化为简单的科学数字?谁能告诉我如何轻松实现这一目标?

玩具数据:

savedDF <- list(
  bar = data.frame(.start=c(12,21,37), .stop=c(14,29,45), .score=c(5,69,14)),
  cat = data.frame(.start=c(18,42,18,42,81), .stop=c(27,46,27,46,114), .score=c(15,5,15,5,134)),
  foo = data.frame(.start=c(3,3,33,3,33,91), .stop=c(26,26,42,26,42,107), .score=c(22,22,6,22,6,7))
)

我得到了这个奇怪的输出:

> .savedDF
$bar
  .start .stop .score                                                                 p.value
1     12    14      5 0.000010000000000000000817488438054070343241619411855936050415039062500
2     21    29     69 0.000000000000000000000000000000000000000000000000000000000000000000001
3     37    45     14 0.000000000000009999999999999999990459020882127560980734415352344512939

$cat
  .start .stop .score p.value
1     18    27     15   1e-15
2     42    46      5   1e-05
3     18    27     15   1e-15
4     42    46      5   1e-05
5     81   114    134  1e-134

$foo
  .start .stop .score                  p.value
1      3    26     22 0.0000000000000000000001
2      3    26     22 0.0000000000000000000001
3     33    42      6 0.0000010000000000000000
4      3    26     22 0.0000000000000000000001
5     33    42      6 0.0000010000000000000000
6     91   107      7 0.0000001000000000000000

我不知道这是怎么回事,只需要第二种 data.frame' 格式。如何尽可能简单地规范化 p.value 列?

cat 的最后一列被认为是我想要的格式,或者更精确但简单的科学数字也适合我。

如何对异常长的十进制数进行规范化?我怎样才能达到我想要的输出?任何想法 ?非常感谢

0 是默认的 scipen 选项。 (有关更多详细信息,请参阅 ?options。)您显然已将选项更改为 100,这告诉 R 使用十进制计数法,除非它比科学计数法长 100 个字符。要恢复默认设置,运行 行

options(scipen = 0)

至于 "So in my function, I could add this option as well?" - 你不应该那样做。在您的 脚本 中执行此操作很好,但在 函数 中则不行。函数真的不应该设置用户选项。这可能就是您陷入困境的原因 - 您可能粗鲁地使用了某些功能 运行 options(scipen = 100) 并在您不知情的情况下更改了您的选项。

相关:反题How to disable scientific notation in R?