举个例子:
>x <- seq(0,1,by=0.2) # seq()生成序列的函数。
>y <- seq(0,1,by=0.2)
>y[4]
[1] 0.6
>x[3]
[1] 0.4
>1-x[3]
[1] 0.6
> y[4] > 1-x[3]
[1] TRUE
这里竟然出现了0.6大于0.6的情况。 这也是在计算机中经常出现的一个问题。(不过表示出来这样的结果起始应该算是R的缺陷,稍微高级的数学运算软件一般都会通过一些方法来克服),笔者这里想说之前写过一篇文章中python也有这样的问题
。
简单来说,就是浮点数在计算机中的表达有限制,不能以任意精度存储,所以,尤其是微小的数字或者巨大的数字在运算时经常会出现一些意外情况。
再举几个例子
>seq(0, 1, 0.1)
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
>seq(0,1,0.1) == c(0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1)
[1] TRUE TRUE TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
>0.3 - 0.7 + 0.4 == 0
[1] FALSE
>sqrt(2)^2 == 2
[1] FALSE
因此,在处理R里面的数据时,尤其是在判断时,需要特别注意精度问题。
网友评论