138 lines
4.1 KiB
Plaintext
138 lines
4.1 KiB
Plaintext
|
---
|
||
|
title: "Comparing display with data frames"
|
||
|
output: html_vignette
|
||
|
vignette: >
|
||
|
%\VignetteIndexEntry{Comparing display with data frames}
|
||
|
%\VignetteEngine{knitr::rmarkdown}
|
||
|
%\VignetteEncoding{UTF-8}
|
||
|
---
|
||
|
|
||
|
```{r setup, include = FALSE}
|
||
|
library(tibble)
|
||
|
set.seed(1014)
|
||
|
knitr::opts_chunk$set(
|
||
|
collapse = TRUE,
|
||
|
comment = "#>"
|
||
|
)
|
||
|
```
|
||
|
|
||
|
```{r}
|
||
|
library(tibble)
|
||
|
```
|
||
|
|
||
|
Base R offers the `"digits"` and `"scipen"` options to control the number of significant digits and the switch to scientific notation.
|
||
|
For tibble, the options `"pillar.sigfig"` and `"pillar.max_dec_width"` fulfill a similar purpose.
|
||
|
This vignette showcases similarities and differences.
|
||
|
See `?pillar::pillar_options` and `?tibble_options` for an overview over all options.
|
||
|
|
||
|
## Digits
|
||
|
|
||
|
### Basic differences
|
||
|
|
||
|
The default for `getOption("digits")` is 7, whereas the `"pillar.sigfig"` option defaults to 3.
|
||
|
In the default setting, pillar prints the first three digits only (i.e. the digits that represent > 99.9% of the value of the number).
|
||
|
Another difference is that pillar will show at most the specified number of significant digits, even if space is available.
|
||
|
The rationale is to allow a quick glance over the most significant digits of a number, without spending too much horizontal space and without distraction from insignificant digits.
|
||
|
|
||
|
```{r}
|
||
|
options(digits = 3)
|
||
|
c(1.2345, 12.345, 123.45, 1234.5, 12345)
|
||
|
tibble(x = c(1.2345, 12.345, 123.45, 1234.5, 12345))
|
||
|
```
|
||
|
|
||
|
### Terminal zeros
|
||
|
|
||
|
Terminal zeros are only shown in pillar if there is a nonzero value past the significant digits shown.
|
||
|
This is in contrast to base R where terminal zeros are always shown if there is space, but hidden if the value is too insignificant:
|
||
|
|
||
|
```{r}
|
||
|
c(1, 1.00001)
|
||
|
tibble(x = c(1, 1.00001))
|
||
|
```
|
||
|
|
||
|
### Trailing dot
|
||
|
|
||
|
A trailing decimal separator is shown if there is a fractional part but the integer part already exceeds the significant digits.
|
||
|
The presence of the decimal separator does **not** indicate that the number is larger, only that there exists a nonzero fractional part:
|
||
|
|
||
|
```{r}
|
||
|
c(123, 123.45, 567.89)
|
||
|
tibble(x = c(123, 123.45, 567.89))
|
||
|
```
|
||
|
|
||
|
### Showing more digits
|
||
|
|
||
|
To show more significant digits, set the `"pillar.sigfig"` option to a larger value:
|
||
|
|
||
|
```{r}
|
||
|
options(digits = 7)
|
||
|
options(pillar.sigfig = 7)
|
||
|
c(1.2345, 12.345, 123.45, 1234.5, 12345)
|
||
|
tibble(x = c(1.2345, 12.345, 123.45, 1234.5, 12345))
|
||
|
```
|
||
|
|
||
|
Setting `"pillar.sigfig"` to a larger value will not enhance the display with digits deemed insignificant:
|
||
|
|
||
|
```{r}
|
||
|
options(digits = 7)
|
||
|
options(pillar.sigfig = 7)
|
||
|
c(1.2345, 12.3456, 123.4567, 1234.5678, 12345.6789)
|
||
|
tibble(x = c(1.2345, 12.3456, 123.4567, 1234.5678, 12345.6789))
|
||
|
```
|
||
|
|
||
|
### Fixed number of digits
|
||
|
|
||
|
To show a fixed number of decimal digits, use `num()` with a `digits` argument:
|
||
|
|
||
|
```{r}
|
||
|
num(c(1.2345, 12.345, 123.45, 1234.5, 12345), digits = 2)
|
||
|
```
|
||
|
|
||
|
See `vignette("numbers")` for details.
|
||
|
|
||
|
## Scientific notation
|
||
|
|
||
|
### When is it used?
|
||
|
|
||
|
Both base R and pillar switch to scientific notation when the decimal representation becomes too wide.
|
||
|
The larger `getOption("scipen")`, the stronger the resistance to switching to scientific notation.
|
||
|
The default `0` seems to be anchored at 13 digits for the integer part.
|
||
|
|
||
|
```{r}
|
||
|
123456789012
|
||
|
123456789012.3
|
||
|
1234567890123
|
||
|
1234567890123.4
|
||
|
options(scipen = 1)
|
||
|
1234567890123
|
||
|
12345678901234
|
||
|
12345678901234.5
|
||
|
```
|
||
|
|
||
|
The `"pillar.max_dec_width"` option is similar, it indicates the width that must be exceeded for a switch to scientific notation to happen.
|
||
|
This width includes the decimal separator.
|
||
|
|
||
|
```{r}
|
||
|
tibble(x = 123456789012)
|
||
|
tibble(x = 123456789012.3)
|
||
|
tibble(x = 1234567890123)
|
||
|
tibble(x = 1234567890123.4)
|
||
|
options(pillar.max_dec_width = 14)
|
||
|
tibble(x = 1234567890123)
|
||
|
tibble(x = 12345678901234)
|
||
|
tibble(x = 12345678901234.5)
|
||
|
```
|
||
|
|
||
|
### Enforce notation
|
||
|
|
||
|
To avoid switching to scientific notation, set the `"pillar.max_dec_width"` option to a large value.
|
||
|
Note that if the required width is not available to show the column, it will not be shown at all in this case.
|
||
|
The `notation` argument to `num()` offers more options:
|
||
|
|
||
|
```{r}
|
||
|
num(12345678901234567, notation = "dec")
|
||
|
num(12345678901234567, notation = "sci")
|
||
|
num(12345678901234567, notation = "eng")
|
||
|
num(12345678901234567, notation = "si")
|
||
|
```
|