四捨五入をする
目標
Rで四捨五入を行う。
動機
round()関数だと最近接偶数への丸めとなってしまうため。
課題
ここでは負の数の四捨五入を『0.5を足して負への無限大へ丸める』ことにする。
例) -1.4 -> -1 -1.5 -> -1 -1.6 -> -2 -2.1 -> -2
実施
環境
- Windows 7 Home Premium 64bit
- R 3.2.2
- RStudio 0.99.489
作業
次の関数を四捨五入の関数として定義する.
結果
> x <- seq(0.5, 9.5, by=1) > x [1] 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 > round(x) [1] 0 2 2 4 4 6 6 8 8 10 > round.off(x) [1] 1 2 3 4 5 6 7 8 9 10 > > y <- seq(-9.5, -0.5, by=1) > y [1] -9.5 -8.5 -7.5 -6.5 -5.5 -4.5 -3.5 -2.5 -1.5 -0.5 > round(y) [1] -10 -8 -8 -6 -6 -4 -4 -2 -2 0 > round.off(y) [1] -9 -8 -7 -6 -5 -4 -3 -2 -1 0 > > round(2.5) [1] 2 > round.off(2.5) [1] 3 > > round(0.145, 2) [1] 0.14 > round.off(0.145, 2) [1] 0.15 > > round(-0.145, 2) [1] -0.14 > round.off(-0.145, 2) [1] -0.14 >
説明
4行目で四捨五入する桁まで一旦整数化することで、浮動小数点誤差を無視する。
4行目で得られる値は絶対値をとっていることから必ず正数になる。それに元の数の正負を反映し、下の参考サイト通りに計算したのが5行目のfloor関数。10の累乗で割り算をしているのは、値を元の桁に戻すため。
Rounding - Wikipedia, the free encyclopedia
もっと楽ちんな方法があればご教授ください。