[R] round() - strange results

Duncan Murdoch murdoch at stats.uwo.ca
Tue Feb 22 21:51:37 CET 2005


On Tue, 22 Feb 2005 10:10:58 -0800, "Dongseok Choi" <choid at ohsu.edu>
wrote :

>Hello,
> 
>  I found that round() does not behave as I expected.
>  Have you had similar experience as following?
> 
>> x<-seq(0.5,10.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 10.5
>> round(x)
> [1]  0  2  2  4  4  6  6  8  8 10 10
>> cbind(x,round(x))
>         x   
> [1,]  0.5  0
> [2,]  1.5  2
> [3,]  2.5  2
> [4,]  3.5  4
> [5,]  4.5  4
> [6,]  5.5  6
> [7,]  6.5  6
> [8,]  7.5  8
> [9,]  8.5  8
>[10,]  9.5 10
>[11,] 10.5 10
>
> 
>  Is this a well-known bug?

As others have said, it's not a bug at all.  If you would like to
round up instead, what you should do is use a function like this:

> roundup <- function(x) trunc(x+0.5)

> x <- -5:5 + 0.5
> x
 [1] -4.5 -3.5 -2.5 -1.5 -0.5  0.5  1.5  2.5  3.5  4.5  5.5
> round(x)
 [1] -4 -4 -2 -2  0  0  2  2  4  4  6
> roundup(x)
 [1] -4 -3 -2 -1  0  1  2  3  4  5  6


If this doesn't handle negatives the way you want, play around a bit
with abs().

Duncan Murdoch




More information about the R-help mailing list