[R] Bug in "is" ?

ctu at bigred.unl.edu ctu at bigred.unl.edu
Wed Sep 24 19:02:40 CEST 2008


Hi Keith,
No doubt, 7.0 is integer in math. But if people can write 7 why people  
need to write 7.0 (I do not see any reason to do this). My point is  
that R maybe can do something like S-plus. No point to argue. don't  
you think so?
Thanks
Chunhao




Quoting Keith Jewell <k.jewell at campden.co.uk>:

> Have you tried is.integer(7.0) in S-Plus? (I have)
> Do you think 7.0 is integer?
>
> IMHO in R there is nothing to be fixed (in this regard) except your
> understanding.
>
> This is a computer language, not English; intuition isn't reliable, so we
> have help pages.
> is.integer(x) is not intended to indicate whether the value of x is a whole
> number, it indicates whether x has class "integer".
> All objects of class "integer" have whole number values, but not all objects
> with whole number values have class "integer".
> If you want to know whether a value is a whole number you could try (but
> there may be a better way, and beware of computer precision)
> x == as.integer(x)
>
> If you want a value to be stored in an object of class "integer" you'd
> better say so (using as.integer or L or ...), else how is R to know what you
> want? As Martin has pointed out, the system could "guess" based on the
> presence or absence of a decimal point; I share his opinion that this would
> be a "bad thing".
>
> Nuff said.
>
> Keith J
>
> <ctu at bigred.unl.edu> wrote in message
> news:20080924110837.bwdaetj1xcs8c0k4 at wm-imp-1.unl.edu...
>> 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.
>>
>> Thanks again
>> Chunhao
>>
>>
>> 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.
>>
>
> ______________________________________________
> 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