gpt4 book ai didi

r - 接近下溢限制的数字在 tibble 中显示为 `Inf.e-324`?

转载 作者:行者123 更新时间:2023-12-05 02:25:58 25 4
gpt4 key购买 nike

根据 docs ,“在典型的 R 平台上,最小的正 double 约为 5e-324。”给定一个 double 向量,其值高于、接近和低于此限制:

library(tibble)

small_vec <- c(4e-300, 4e-324, 4e-350)
small_df <- data.frame(x = small_vec)
small_tibble <- tibble(x = small_vec)

打印 small_vecsmall_df 给出了我所期望的:

small_vec
#> [1] 4.000000e-300 4.940656e-324 0.000000e+00

small_df
#> x
#> 1 4.000000e-300
#> 2 4.940656e-324
#> 3 0.000000e+00

第二个值不太正确,我隐约理解是由于 float 异常。第三个数字下溢到 0。美好的。但是作为小标题打印,

small_tibble
#> # A tibble: 3 × 1
#> x
#> <dbl>
#> 1 4 e-300
#> 2 Inf.e-324
#> 3 0

创建于 2022-10-19 reprex v2.0.2

我被 Inf.e-324 迷住了——Inf 的想法带有指数和小数点。这是什么意思?或者它可能是 tibble 包中的错误?

最佳答案

(评论有点长。)

当然看起来像是一个错误,但我认为它不在 tibble 本身 中,而是在下面的 pillar 包中。 图书馆(支柱); pillar_shaft(small_vec) 显示相同的病理。向下挖掘:查看pillar:::format.pillar_shaft_decimal(),它使用了这个对象的$sci组件。该组件看起来很可疑:

> pillar_shaft(small_vec)$sci

[harmless-looking stuff]

$lhs
[1] "4" "Inf" "0"

$lhs_zero
[1] FALSE FALSE TRUE

$rhs
[1] 0 NaN 0

[harmless-looking stuff]

所以我们可能必须看看 pillar_shaft 在转换过程中做了什么。

具体在

pillar:::pillar_shaft_number_attr(small_vec, NULL, NULL)

它指向pillar_shaft_number似乎通向

pillar:::split_decimal(small_vec, sigfig = 3, digits = NULL)

但是,奇怪的是,那个看起来不错,所以我一定是在某个地方失去了情节。

关于r - 接近下溢限制的数字在 tibble 中显示为 `Inf.e-324`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74131047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com