[R] Bug in "is" ?

Greg Snow Greg.Snow at imail.org
Wed Sep 24 21:05:56 CEST 2008


Mathematicians are concerned with properties of numbers, computer scientists are concerned with how numbers are stored (and statisticians when doing statistics are more concerned with data than numbers).  R is an implementation of the S programming language (along with many tools written in that language) so fits in more with the computer scientist view than the mathematical view.  So, is.integer is telling you about how 7 is stored, not the property of the number 7.  If we write 7L then we tell R/S that we want 7 stored as an integer, if we write 7. or 7.0 then we tell R/S to store it as double precision, but with 7 it has to guess which we want, and since the real numbers are closed to more operations than the integers (and double precision is the chosen approximation to real), it seems the more practical default.

--
Gregory (Greg) L. Snow Ph.D.
Statistical Data Center
Intermountain Healthcare
greg.snow at imail.org
801.408.8111


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of ctu at bigred.unl.edu
> Sent: Wednesday, September 24, 2008 11:03 AM
> To: Keith Jewell
> Cc: r-help at stat.math.ethz.ch
> Subject: Re: [R] Bug in "is" ?
>
> 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.
> >
>
> ______________________________________________
> 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