[R] Bug in "is" ?

Petr PIKAL petr.pikal at precheza.cz
Thu Sep 25 15:27:37 CEST 2008


Hi

Sorry but I can not agree. If you measure something and your values in a 
vector are

c(5.1, 5.4, 4.8, 5.0)

do you think the first three numbers shall be double and the last one 
integer? Why? It is just that the reading is not precise enough for the 
last value to be let say 5.02.

I understand that you can assume that with making an assignment x <- 5 you 
put an integer number to x but you just put a number to it. It is integer 
in respect that it does not have a fractional part (and it can be tested 
on this feature) but it is not a class integer

Computer minds has limits and I prefer calculation to produce results 
instead of NA

try
 x<-2*10^9
x
is.integer(x)
x.i<-as.integer(x)
is.integer(x.i)

y<-x.i+x.i
Warning message:
In x.i + x.i : NAs produced by integer overflow
> y
[1] NA
> y<-x+x
> y
[1] 4e+09
> 

Regards
Petr

r-help-bounces at r-project.org napsal dne 24.09.2008 19:02:40:

> 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