【发布时间】:2015-12-08 08:51:24
【问题描述】:
我正在尝试处理 R 中的百分比,但我遇到了奇怪的问题。当我将向量的值转换为向量的sum 的百分比时,经常会发生它们加起来不等于一的情况。
小例子:
data <- rnorm(1000)*100
max <- 50
unlist(lapply(0:(1000/max-1),
function(i)
sum(
data[(i*max+1):(i*(max+1))]
/
sum(data[(i*max+1):(i*(max+1))])
)
))-1
它应该给出零向量,但是我得到了这个:
[1] 0.000000e+00 0.000000e+00 -1.110223e-16 -1.110223e-16 0.000000e+00 -1.110223e-16 0.000000e+00 0.000000e+00 0.000000e+00
[10] 0.000000e+00 0.000000e+00 2.220446e-16 0.000000e+00 -4.440892e-16 0.000000e+00 0.000000e+00 0.000000e+00 4.440892e-16
[19] -1.110223e-16 0.000000e+00
有什么补救办法吗?
【问题讨论】:
-
我的机器人朋友 Dason 用来说明 R 使用的浮点运算的例子是
sqrt(2)^2 == 2 -
@TylerRinker -- 或者,更清楚一点,
print(sqrt(2)^2, digits=22) -
另见 Patrick Burns 的优秀 R Inferno 的 Circle 1。
标签: r