[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