From maechler at stat.math.ethz.ch  Thu Apr 23 11:37:37 2009
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Thu, 23 Apr 2009 11:37:37 +0200
Subject: [Rd] 'is.integer' (PR#13671)
In-Reply-To: <49EF7FF1.704@acm.org>
References: <20090422174516.2EB1928321BF@mail.pubhealth.ku.dk>
	<49EF7FF1.704@acm.org>
Message-ID: <18928.14049.374028.202617@lynne.math.ethz.ch>

>>>>> "TP" == Tony Plate <tplate at 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.newsgroups at 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 at r-project.org mailing list
    >> https://stat.ethz.ch/mailman/listinfo/r-devel
    >> 
    >> 

    TP> ______________________________________________
    TP> R-devel at r-project.org mailing list
    TP> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] 'is.integer' (PR#13671)
Martin Maechler