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

Tony Plate tplate at acm.org
Wed Apr 22 22:37:05 CEST 2009


is.integer() is one of those functions with a name that can be confusing 
-- it looks at the underlying storage type of its argument (e.g., 
integer, floating point, character, etc.) not at the value stored in the 
argument.

So, the type of behavior you see is this:

 > is.integer(1)
[1] FALSE
 > is.integer(as.integer(1))
[1] TRUE
 > is.integer(as.integer(1) * 1.0)
[1] FALSE
 > is.integer(as.integer(NA))
[1] TRUE
 >

Careful reading of ?is.integer does tell you this, but I wouldn't accuse 
that help page of making such information blatantly obvious to new users 
of R.

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) 
return(abs(x - round(x)) < tolerance)
 > is.wholenumber(1)
[1] TRUE
 > is.wholenumber(seq(1,5,by=0.5))
[1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE
 >

The 'tolerance' part is to allow for minor deviations that might be due 
to floating point representation issues, e.g., on my computer 1/49 * 49 
does not result in a value that is exactly equal to 1:

 > 1/49 * 49 - 1
[1] -1.110223e-16
 > is.wholenumber(1/49 * 49)
[1] TRUE
 > is.wholenumber(1/49 * 49, tol=0)
[1] FALSE
 >

-- Tony Plate

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
>
>



More information about the R-devel mailing list