1. ホーム
  2. r

.5から切り上げ

2023-09-15 04:52:18

質問

はい、私は、2 つの数値のちょうど真ん中にいる場合 (つまり、2.5 が 2 になる場合)、なぜ常に最も近い偶数に丸めるのかを知っています。 しかし、私がある人々のためにデータを評価したいとき、彼らはこの動作を望んでいません。これを得るための最も簡単な方法は何でしょうか。

x <- seq(0.5,9.5,by=1)
round(x)

を 1,2,3,...,10 とし、0,2,2,4,4,...,10 とはしないようにします。

編集:明確にするために:1.4999は四捨五入の後、1であるべきです。(これは明らかだろうと思った)

どのように解決するのですか?

これは私自身の機能ではありませんし、残念ながら 私は今私がそれを得た場所を見つけることができません (で匿名コメントとして発見されました。 統計的に有意な ブログ ) が、必要なものの助けになるはずです。

round2 = function(x, n) {
  posneg = sign(x)
  z = abs(x)*10^n
  z = z + 0.5 + sqrt(.Machine$double.eps)
  z = trunc(z)
  z = z/10^n
  z*posneg
}

x は丸めたいオブジェクト、そして n は丸める桁数です。

x = c(1.85, 1.54, 1.65, 1.85, 1.84)
round(x, 1)
# [1] 1.8 1.5 1.6 1.8 1.8
round2(x, 1)
# [1] 1.9 1.5 1.7 1.9 1.8

(@Gregor さんのおかげで + sqrt(.Machine$double.eps) .)