Comparing display with data frames

library(tibble)

Base Rでは、有効桁数および科学的記数法への切り替えを制御するために、"digits" および "scipen" オプションが用意されている。 tibbleについては、"pillar.sigfig""pillar.max_dec_width" のオプションが同様の目的を果たす。 この vignette では、共通点と相違点を紹介している。 すべてのオプションの概要については、?pillar::pillar_options?tibble_options を参照。

Digits

基本的な違い

getOption("digits") のデフォルトは7であるが、"pillar.sigfig" のオプションはデフォルトが3である。 デフォルトの設定では、pillarは最初の3桁のみを表示す(つまり、数値の値の99.9%以上を表す桁)。 もう一つの違いは、pillar はスペースがあっても最大で指定された有効桁数しか表示しないことである。 その理由は、横方向のスペースをあまりとらず、重要でない桁に気を取られることなく、数字の最も重要な桁を素早く見ることができるようにするためである。

options(digits = 3)
c(1.2345, 12.345, 123.45, 1234.5, 12345)
#> [1]     1.23    12.35   123.45  1234.50 12345.00
tibble(x = c(1.2345, 12.345, 123.45, 1234.5, 12345))
#> # A tibble: 5 × 1
#>          x
#>      <dbl>
#> 1     1.23
#> 2    12.3 
#> 3   123.  
#> 4  1234.  
#> 5 12345

端末のゼロ

末尾のゼロは、表示されている有効桁を越えてゼロ以外の値がある場合にのみピラーで表示される。 これは、スペースがあれば常に終端ゼロが表示され、値が小さすぎる場合は隠されるベースRとは対照的である。

c(1, 1.00001)
#> [1] 1 1
tibble(x = c(1, 1.00001))
#> # A tibble: 2 × 1
#>       x
#>   <dbl>
#> 1  1   
#> 2  1.00

ドット

小数部があっても整数部がすでに有効桁を超えている場合は、末尾の小数点が表示される。 小数点の区切り文字があることは、数字が大きいことを示すのではなく、ゼロ以外の小数部分が存在することを示すだけである。

c(123, 123.45, 567.89)
#> [1] 123 123 568
tibble(x = c(123, 123.45, 567.89))
#> # A tibble: 3 × 1
#>       x
#>   <dbl>
#> 1  123 
#> 2  123.
#> 3  568.

桁数表示

より多くの有効数字を表示すには、"pillar.sigfig" オプションをより大きな値に設定する。

options(digits = 7)
options(pillar.sigfig = 7)
c(1.2345, 12.345, 123.45, 1234.5, 12345)
#> [1]     1.2345    12.3450   123.4500  1234.5000 12345.0000
tibble(x = c(1.2345, 12.345, 123.45, 1234.5, 12345))
#> # A tibble: 5 × 1
#>            x
#>        <dbl>
#> 1     1.2345
#> 2    12.345 
#> 3   123.45  
#> 4  1234.5   
#> 5 12345

"pillar.sigfig" を大きく設定しても、重要でないと判断した桁の表示は強化されていない。

options(digits = 7)
options(pillar.sigfig = 7)
c(1.2345, 12.3456, 123.4567, 1234.5678, 12345.6789)
#> [1]     1.2345    12.3456   123.4567  1234.5678 12345.6789
tibble(x = c(1.2345, 12.3456, 123.4567, 1234.5678, 12345.6789))
#> # A tibble: 5 × 1
#>            x
#>        <dbl>
#> 1     1.2345
#> 2    12.3456
#> 3   123.4567
#> 4  1234.568 
#> 5 12345.68

桁数固定

小数点以下の固定桁数を表示すには、num()digits を引数として与える。

num(c(1.2345, 12.345, 123.45, 1234.5, 12345), digits = 2)
#> <pillar_num:.2![5]>
#> [1]     1.23    12.35   123.45  1234.50 12345.00

詳しくは vignette("numbers") を参照。

科学的記数法

どんなときに使うのか? {#when-is-it-used?}

ベースRもピラーも、10進数表現が広くなりすぎると科学的な表記に切り替わる。 getOption("scipen") が大きいほど、科学的記数法に切り替えることへの抵抗が強くなる。 デフォルトの 0 は、整数部が13桁に固定されているようである。

123456789012
#> [1] 123456789012
123456789012.3
#> [1] 123456789012
1234567890123
#> [1] 1.234568e+12
1234567890123.4
#> [1] 1.234568e+12
options(scipen = 1)
1234567890123
#> [1] 1234567890123
12345678901234
#> [1] 1.234568e+13
12345678901234.5
#> [1] 1.234568e+13

"pillar.max_dec_width" オプションも同様で、科学的記数法への切り替えが起こるために超えなければならない幅を示す。 この幅には、小数点以下の区切り文字も含まれる。

tibble(x = 123456789012)
#> # A tibble: 1 × 1
#>              x
#>          <dbl>
#> 1 123456789012
tibble(x = 123456789012.3)
#> # A tibble: 1 × 1
#>               x
#>           <dbl>
#> 1 123456789012.
tibble(x = 1234567890123)
#> # A tibble: 1 × 1
#>               x
#>           <dbl>
#> 1 1234567890123
tibble(x = 1234567890123.4)
#> # A tibble: 1 × 1
#>             x
#>         <dbl>
#> 1 1.234568e12
options(pillar.max_dec_width = 14)
tibble(x = 1234567890123)
#> # A tibble: 1 × 1
#>               x
#>           <dbl>
#> 1 1234567890123
tibble(x = 12345678901234)
#> # A tibble: 1 × 1
#>                x
#>            <dbl>
#> 1 12345678901234
tibble(x = 12345678901234.5)
#> # A tibble: 1 × 1
#>             x
#>         <dbl>
#> 1 1.234568e13

表記方法の強化

科学的記数法に切り替わらないようにするには、"pillar.max_dec_width" オプションを大きな値に設定してみよう。 なお、列を表示すために必要な幅がない場合は、この場合、全く表示されていない。 num() の引数 notation には、さらに多くのオプションが用意されている。

num(12345678901234567, notation = "dec")
#> <pillar_num(dec)[1]>
#> [1] 12345678901234568
num(12345678901234567, notation = "sci")
#> <pillar_num(sci)[1]>
#> [1] 1.234568e16
num(12345678901234567, notation = "eng")
#> <pillar_num(eng)[1]>
#> [1] 12.34568e15
num(12345678901234567, notation = "si")
#> <pillar_num(si)[1]>
#> [1] 12.34568P