[R] Bug in "is" ?

Douglas Bates bates at stat.wisc.edu
Wed Sep 24 21:45:08 CEST 2008


On Wed, Sep 24, 2008 at 11:08 AM,  <ctu at bigred.unl.edu> wrote:
> Thank you for all of you. Intuitively, 7 is an integer for people who live
> in this planet. It is just very difficult for me to believe that R does not
> think 7 is an integer but 7L is.
>>
>> is.integer(7)  # R 2.7.2
>
> [1] FALSE
> Thus, based on Martin's comments, I try it again on the S-PLUS 8.0 and it
> shows
>>
>> is.integer(7)   # S-PLUS 8.0
>
> [1] T
>
> Hopefully, someday and someone will fix it therefore, R users don't need to
> use as.integer(7) to tell R that 7 is an integer.

My father taught me at an early age not to criticize the way that
someone else does something until after you have shown that you can do
it better.  The fact that you don't agree with a design decision
doesn't mean that it is wrong and should be "fixed".

We look forward to using the system for computing with data that you
will develop and make freely available and in which 7 will be stored
as an integer.  In the meantime, if you want to use R then you will
just need to grit your teeth and accept that literal constants like
'7' are stored as floating point values and literal constant like '7L'
are stored as integers.



> Quoting Martin Maechler <maechler at stat.math.ethz.ch>:
>
>>>>>>> "KJ" == Keith Jewell <k.jewell at campden.co.uk>
>>>>>>>    on Wed, 24 Sep 2008 09:46:08 +0100 writes:
>>
>>    KJ> "7" is an integer, but it's also a real.
>>    KJ> In R '?is'  and '?is.integer' are clear that you're testing  the
>> class(es) of
>>    KJ> objects, not their values.
>>    KJ> I can't comment on the relationship with "S Programming"
>>
>> I can:
>>
>> In S, and S-plus upto version 3.4,
>> numeric constants such as '7' where  "double" as they are in R.
>>
>> Then in S-plus 5.1, they became "integer",
>> and there were tools so users could change all(!!) their S
>> scripts to use '7.' instead of '7' in all places where numeric
>> constants were seen, in order to keep behavior back compatible.
>>
>> R never made such a step (backwards ;-), and never will,
>> notably since in R we had introduced the explicit long (= long
>> integer) constants, using the 'L' suffix,
>> i.e.,  7L is "integer"
>>        7 is "double"
>>
>> Note however that for both, is.numeric(.) is fulfilled and
>> class(.) and mode(.) return "numeric".
>> Only typeof(.), storage.mode(.)  or  str(.)
>> (or functions building on these) tell you the difference.
>>
>> Martin Maechler, ETH Zurich and R core team
>>
>> [And, yes, if you think further and are wondering:
>>  If we'd design things from scratch, we would only have S4
>>  classes and "double" would be a proper class and
>>  "numeric" would be the class union of {"integer", "double"}
>> ]
>>
>>
>>    KJ> <ctu at bigred.unl.edu> wrote in message
>>    KJ> news:20080924000503.1fsyrqf6zokk40kg at wm-imp-1.unl.edu...
>>    >> This is really bothering me! In the Dr. Venables and Dr.  Ripley's
>> book  "S
>>    >> Programming" Page 105
>>    >> shows that
>>    >>> c(is(10,"integer"),is(10.5,"integer"))
>>    >> [1] T F
>>    >>
>>    >> But I try this in R 2.7.2 it shows
>>    >>> c(is(10,"integer"),is(10.5,"integer"))
>>    >> [1] FALSE FALSE
>>    >> Does anyone know what is going on here?
>>    >>
>>    >> Appreciate,
>>    >> Chunhao
>>    >>
>>    >> Quoting Yihui Xie <xieyihui at gmail.com>:
>>    >>
>>    >>> Yes, everyone will agree "7" is an integer, but I don't think
>>    >>> computers will agree too :-) R thinks it's a double-precision
>> number,
>>    >>> except when you explicitly specify it as an integer (say,
>>    >>> as.integer()).
>>    >>>
>>    >>>> class(7)
>>    >>> [1] "numeric"
>>    >>>
>>    >>>> is.double(7)
>>    >>> [1] TRUE
>>    >>>
>>    >>> Regards,
>>    >>> Yihui
>>    >>> --
>>    >>> Yihui Xie <xieyihui at gmail.com>
>>    >>> Phone: +86-(0)10-82509086 Fax: +86-(0)10-82509086
>>    >>> Mobile: +86-15810805877
>>    >>> Homepage: http://www.yihui.name
>>    >>> School of Statistics, Room 1037, Mingde Main Building,
>>    >>> Renmin University of China, Beijing, 100872, China
>>    >>>
>>    >>>
>>    >>>
>>    >>> On Wed, Sep 24, 2008 at 12:40 PM,  <ctu at bigred.unl.edu> wrote:
>>    >>>> Hi R users
>>    >>>> Is there anything wrong in "is" function? (R 2.7.2)
>>    >>>> I believe that everyone will agree that "7" is an integer,  right?
>> but
>>    >>>> why R
>>    >>>> shows 7 is not an integer
>>    >>>>
>>    >>>>> is.integer(7)
>>    >>>>
>>    >>>> [1] FALSE
>>    >>>>>
>>    >>>>> is(7,"integer")
>>    >>>>
>>    >>>> [1] FALSE
>>    >>>>>
>>    >>>>> is(as.integer(7), "integer")
>>    >>>>
>>    >>>> [1] TRUE
>>    >>>>
>>    >>>> Thank you very much in advance
>>    >>>> Chunhao
>>
>>    KJ> ______________________________________________
>>    KJ> R-help at r-project.org mailing list
>>    KJ> https://stat.ethz.ch/mailman/listinfo/r-help
>>    KJ> PLEASE do read the posting guide
>>  http://www.R-project.org/posting-guide.html
>>    KJ> and provide commented, minimal, self-contained, reproducible code.
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> 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.
>>
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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