[R] customize the step value
Rui Barradas
ru|pb@rr@d@@ @end|ng |rom @@po@pt
Fri Oct 29 17:20:01 CEST 2021
Hello,
Às 14:07 de 29/10/21, Duncan Murdoch escreveu:
> On 29/10/2021 4:34 a.m., PIKAL Petr wrote:
>> Hi
>>
>> One has to be careful when using fractions in seq step.
>>
>> Although it works for 0.5
>>> (seq(0,10, .5) - round(seq(0,10,.5),2))==0
>> [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
>> TRUE
>> TRUE
>> [16] TRUE TRUE TRUE TRUE TRUE TRUE
>>
>> in case of 0.3 (or others) it does not always result in expected
>> values (see
>> FAQ 7.31 for explanation)
>>
>>> (seq(0,10, .3) - round(seq(0,10,.3),2))==0
>> [1] TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE
>> TRUE TRUE
>> [13] FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE
>> FALSE
>> [25] FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
>
>
> Petr is right, it's unsafe to use fractional values for the step. 0.5
> works because it has a power of 2 in the denominator and so does the
> start value, but it's easy to make mistakes when you rely on that (e.g.
> changing the step size from 0.5 to 0.3 would break things).
>
> A better idea is to modify a sequence of integers. For example, to get
> 1.5 to 3.5 by 0.5, you can do (3:7)*0.5, and for 0 to 3 by 0.3, use
> (0:10)*0.3.
But even this is not safe.
Perhaps the most frequent sequence causing problems (R-Help questions)
is the one from 0 to 1 by 0.1 and why it always returns FALSE when
tested against certain values such as 0.6.
And it also fails to create it with (0:10)*0.1.
x <- seq(0, 1, by = 0.1)
any(x == 0.6)
#[1] FALSE
y <- (0:10)*0.1
any(y == 0.6)
#[1] FALSE
all(x == y)
#[1] TRUE
Off-topic: FAQ 7.31 addresses this.
Hope this helps,
Rui Barradas
>
> Duncan Murdoch
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list