[R] as.character(seq(-.35,.95,.1))

Duncan Murdoch murdoch at stats.uwo.ca
Tue Nov 20 17:07:42 CET 2007


On 11/20/2007 10:50 AM, Ken Fullish wrote:
>  > as.character(seq(-.25,.95,.1))
>   [1] "-0.25" "-0.15" "-0.05" "0.05"  "0.15"  "0.25"  "0.35"  "0.45"   
> "0.55"  "0.65"  "0.75"  "0.85"  "0.95"
> 
>  > as.character(seq(-.35,.95,.1))
>   [1] "-0.35"               "-0.25"                
> "-0.15"               "-0.0499999999999999" "0.05"
>   [6] "0.15"                "0.25"                 
> "0.35"                "0.45"                "0.55"
> [11] "0.65"                "0.75"                 
> "0.85"                "0.95"
> 
> Not a big deal, just curiosity:
> Why do I obtain this "ugly" "-0.0499999999999999" instead of the  
> expected "-0.05" ?

Because as.character() tries to do an accurate conversion, and the 
number in your vector is closer to -0.0499999999999999 than to -0.05.
You could get the "-0.05" by something like round( seq(...), 2).

The reason seq() doesn't give you exactly -0.05 is that the starting 
values and step size you've chosen are not exactly representable in R's 
floating point format.   It can only store fractions exactly when the 
denominator is a power of 2.

Duncan Murdoch



More information about the R-help mailing list