関数option()のscipenによって指数表記を回避する

Rで大きな数値を扱うと指数表記で表示される。
例えば、10,000はそのまま表示されるが100,000は指数表記となる。

> 10000
[1] 10000
> 100000
[1] 1e+05

この指数表記を回避するには、関数option()のscipenという引数を利用する。
ヘルプには以下の様に書かれている。

scipen:
integer. A penalty to be applied when deciding to print numeric values in fixed or exponential notation. Positive values bias towards fixed and negative towards scientific notation: fixed notation will be preferred unless it is more than scipen digits wider.

scipenに正の整数を指定し、その値が大きいほど桁数の大きな数値でも指数表記を回避しやすくなる。一方、負の整数を指定すると指数表記になりやすくなる。
なお、ヘルプの別の箇所に記載されているが、初期値はscipen=0である。(ところで、引数名の由来でもあるpenaltyの語感が私には分からない。良い命名なのだろうか?)

では、先ほどの10,000と100,000に加え、1,000,000もあわせてこの設定を試してみる。

> options(scipen=1)
> 10000
[1] 10000
> 100000
[1] 100000
> 1000000
[1] 1e+06

100,000も指数表記ではなくなったが。新たに追加した1,000,000が指数表記なので、scipenの値を増やしてみる。

> options(scipen=2)
> 1000000
[1] 1000000

回避できた。実際の運用を考えると、桁数に合わせてscipenの値を細かく調整するのは面倒なので、scipen=100と設定することが多いようだ。

ちなみに、改めてscipen=0で挙動を見てみると、6桁以上のときに指数表記となるわけではなく、5桁の99,995も指数表記となる。

> options(scipen=0)
> 10000
[1] 10000
> 99994
[1] 99994
> 99995
[1] 1e+05

細かいことは考えずに options(scipen=100) にしている。