[Rd] seq.int does not return a sequence of integers sometimes

Marc Schwartz marc_schwartz at me.com
Wed Aug 3 22:26:25 CEST 2016


> On Aug 3, 2016, at 3:12 PM, Paul Johnson <pauljohn32 at gmail.com> wrote:
> 
> I have a script that goes wrong because I assumed that seq.int would
> return integers.
> 
> Below please see it does not unless user is super cautious about
> inserting "L" with inputs. I think seq.int should do coercion for me
> before returning the sequence.
> 
>> xx <- seq.int(1,10)
>> class(xx)
> [1] "integer"
>> is.integer(xx)
> [1] TRUE
>> xx <- seq.int(1,10, 2)
>> class(xx)
> [1] "numeric"
>> is.integer(xx)
> [1] FALSE
>> xx <- seq.int(1,10, 2L)
>> class(xx)
> [1] "numeric"
>> is.integer(xx)
> [1] FALSE
>> xx <- seq.int(1L, 10L, 2L)
>> class(xx)
> [1] "integer"
>> is.integer(xx)
> [1] TRUE
> 
> 
> I think all of those should have same return value, if the function is
> correctly named seq.int.


Paul,

?seq.int has the following:

under Details:

"seq.int is an internal generic which dispatches on methods for "seq" based on the class of the first supplied argument (before argument matching)."

and under Value:

"seq.int and the default method of seq for numeric arguments return a vector of type "integer" or "double": programmers should not rely on which."


So:

> is.integer(1)
[1] FALSE

> is.integer(1L)
[1] TRUE

which would seem to explain the behavior that you are observing.

Regards,

Marc Schwartz



More information about the R-devel mailing list