如何规范化 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?
我有 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?