Re: [Rd] broken (seq as well) (PR#14169)

From: Petr Savicky <>
Date: Thu, 31 Dec 2009 11:17:36 +0100

On Mon, Dec 28, 2009 at 08:50:13PM +0100, wrote: [...]
> # fine as expected from help page:
> # "from+by, ..., up to the sequence value less than or equal to to"
> # thus 1+10=11 is not in
> >, 10L, by=10L)
> [1] 1
> # of course 1+1e7 should also not be in
> # but is: wrong
> >, 1e7L, by=1e7L)
> [1] 1e+00 1e+07
> # since we use AND are within integer range, rounding should not be an
> issue

In my opinion, this is a documented behavior. The Details section of the help page says

     Note that the computed final value
     can go just beyond 'to' to allow for rounding error, but (as from
     R 2.9.0) is truncated to 'to'.

Since "by" is 1e7, going by 1 more than 'to' is "just beyond 'to'".

What can be a bit misleading is the following difference between the type of seq() and, which is only partially documented.

  x <-, to=10000000L, by=10000000L); typeof(x); x   # [1] "double"
  # [1] 1e+00 1e+07

  x <- seq(from=1L, to=10000000L, by=10000000L); typeof(x); x   # [1] "integer"
  # [1] 1 10000000

The Value section of the help page says:

     Currently, '' and the default method of 'seq' return a
     result of type '"integer"' (if it is representable as that and) if
     'from' is (numerically equal to an) integer and, e.g., only 'to'
     is specified, or also if only 'length' or only 'along.with' is
     specified.  *Note:* this may change in the future and programmers
     should not rely on it.

This suggests that we should get "double" in both cases, since all three arguments "from", "to", and "by" are specified. I do not know, whether having an "integer" result in seq() in the above case is intended or not.

Petr Savicky. mailing list Received on Thu 31 Dec 2009 - 10:24:53 GMT

This archive was generated by hypermail 2.2.0 : Thu 31 Dec 2009 - 12:21:16 GMT