[R] R internal data types

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu Jan 15 09:49:20 CET 2004


On Wed, 14 Jan 2004 Benjamin.STABLER at odot.state.or.us wrote:

> I am trying to figure out R data types and/or storage mode.  For example:

[...]

> So it looks like R stores numbers as doubles unless the are converted to
> integers (long) with the as.integer() function or they are created with the
> : operator.  If any of the numbers to a function are not type integer than
> the function returns type double.  Is this the case?  Thanks.

Nearly!

Non-complex `numbers' can have storage mode "double" or "integer".  
Storage mode "integer" is the C `int' type and not the C `long' type, so
probably on all current R platforms doubles are stored in 8 bytes and
integers in 4.

The storage mode is largely under the user/programmer's control: you can 
do

storage.mode(x) <- "double"

for example.  The storage mode of the return value of a function depends 
on how it was programmed, not on the types of its arguments, for example

> x <- seq(10)
> storage.mode(x)
[1] "integer"

Just a few base functions normally return integer results: you have 
mentioned : and as.integer() and I have illustrated seq().  table() and 
tabulate() are two others I know of, and factors are integer vectors with 
particular attributes.

Current versions of S use integer storage mode much more widely, and it is 
quite possible that in due course more functions in R will make use of it.

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list