>>>>> "TP" == Tony Plate <tpl...@acm.org> >>>>> on Wed, 22 Apr 2009 14:37:05 -0600 writes:
TP> is.integer() is one of those functions with a name that can be confusing TP> -- it looks at the underlying storage type of its argument (e.g., TP> integer, floating point, character, etc.) not at the value stored in the TP> argument. TP> So, the type of behavior you see is this: >> is.integer(1) TP> [1] FALSE >> is.integer(as.integer(1)) TP> [1] TRUE >> is.integer(as.integer(1) * 1.0) TP> [1] FALSE >> is.integer(as.integer(NA)) TP> [1] TRUE >> TP> Careful reading of ?is.integer does tell you this, but I wouldn't accuse TP> that help page of making such information blatantly obvious to new users TP> of R. TP> To test whether a value is an integer value, you can so something like this: >> is.wholenumber <- function(x, tolerance = .Machine$double.eps^0.5) TP> return(abs(x - round(x)) < tolerance) >> is.wholenumber(1) TP> [1] TRUE >> is.wholenumber(seq(1,5,by=0.5)) TP> [1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE >> Thank you, Tony. Somewhat contrary to our (R-core) beliefs that a reference should be concise and correct, I have now added (an abridged version of) the is.wholenumber() function to the *examples* on the help(is.integer) page and a note too. Let's pretend we hope that this will stop such bug reports ;-) Martin Maechler TP> The 'tolerance' part is to allow for minor deviations that might be due TP> to floating point representation issues, e.g., on my computer 1/49 * 49 TP> does not result in a value that is exactly equal to 1: >> 1/49 * 49 - 1 TP> [1] -1.110223e-16 >> is.wholenumber(1/49 * 49) TP> [1] TRUE >> is.wholenumber(1/49 * 49, tol=0) TP> [1] FALSE >> TP> -- Tony Plate TP> hzambran.newsgro...@gmail.com wrote: >> Full_Name: Mauricio >> Version: 2.9.0 (2009-04-17) >> OS: i486-pc-linux-gnu >> Submission from: (NULL) (193.205.203.3) >> >> >> This is a very simple function that seems not to be working, according to the >> definition given by '?is.integer'. >> >> I checked in the Bug Tracking page at http://bugs.R-project.org/, but I didn't >> find any related message. >> >> The possible problem is: >> >> >> >>> is.integer(1) >>> >> [1] FALSE >> >> and 1 is obviously an integer value. >> >> >> I would really appreciate if you could clarify if this is really a bug or not. >> >> Thanks in advance, >> >> Mauricio >> >> >>> version >>> >> _ >> platform i486-pc-linux-gnu >> arch i486 >> os linux-gnu >> system i486, linux-gnu >> status >> major 2 >> minor 9.0 >> year 2009 >> month 04 >> day 17 >> svn rev 48333 >> language R >> version.string R version 2.9.0 (2009-04-17) >> >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> >> TP> ______________________________________________ TP> R-devel@r-project.org mailing list TP> https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel