[R] R2.11.1 seq.int difference between by and length.out

R. Michael Weylandt michael.weylandt at gmail.com
Tue Apr 10 20:17:00 CEST 2012


So it's a machine/OS issue: if you really want to trace it down, take
a look here: http://svn.r-project.org/R/trunk/src/main/seq.c

seq.int() in R goes to do_seq() in C, but at this point it's probably
best to identify it as floating-point gremlins and to work around.

Michael

On Tue, Apr 10, 2012 at 12:14 PM, Alexander <juschitz_alexander at yahoo.de> wrote:
> Thank you Michael
>
> It is indeed the OS
>
> identical(seq.int(0,1,length.out = 11), seq.int(0,1, by = 0.1)) # FALSE
>
> [[snip snip]]
>
>
>>>>
>>>>> I am working under R2.11.1 Windows and I was wondering why there is a
>>>>> difference between
>>>>>
>>>>> seq.int(0,1,by=0.1)[4]-0.3
>>>>> seq.int(0,1,length.out=11)[4]-0.3
>>>>>
>>>>> there is also the fact that
>>>>>
>>>>> seq(0,1,by=0.1)[4]-0.3
>>>>> seq(0,1,length.out=11)[4]-0.3
>>>>>
>>>>> but I think this can be explained by floating precision...
>>>>
>>>>
>>>> R FAQ:  http://cran.r-project.org/doc/FAQ/R-FAQ.html
>>>>
>>>> 7.31 Why doesn't R think these numbers are equal?
>>>>
>>> This explains what the difference, but the problem for
>>>
>>> seq(2)*seq(2)==2
>>>
>>> is not the same as
>>>
>>> 0.3+0.1-0.4==0
>>>
>>> There must be a difference in the calculation for by and length.out in
>>> seq.int otherwise there wouldn't be a difference in seq.int
>>>
>>> seq.int(0,1,length.out=11)[4]-seq.int(0,1,by=0.1)[4]
>>>
>>> I am more interested in the generation of the sequence...
>>>

[[snip snip]]



More information about the R-help mailing list