From jon.clayden at gmail.com  Tue Mar 29 14:46:25 2011
From: jon.clayden at gmail.com (Jon Clayden)
Date: Tue, 29 Mar 2011 13:46:25 +0100
Subject: [Rd] Reading 64-bit integers
Message-ID: <AANLkTinndjFuoV17Th4PRUdpbrY-7RjTbyXwY6T6n+cd@mail.gmail.com>

Dear all,

I see from some previous threads that support for 64-bit integers in R
may be an aim for future versions, but in the meantime I'm wondering
whether it is possible to read in integers of greater than 32 bits at
all. Judging from ?readBin, it should be possible to read 8-byte
integers to some degree, but it is clearly limited in practice by R's
internally 32-bit integer type:

> x <- as.raw(c(0,0,0,0,1,0,0,0))
> (readBin(x,"integer",n=1,size=8,signed=F,endian="big"))
[1] 16777216
> x <- as.raw(c(0,0,0,1,0,0,0,0))
> (readBin(x,"integer",n=1,size=8,signed=F,endian="big"))
[1] 0

For values that fit into 32 bits it works fine, but for larger values
it fails. (I'm a bit surprised by the zero - should the value not be
NA if it is out of range?) The value can be represented as a double,
though:

> 4294967296
[1] 4294967296

I wouldn't expect readBin() to return a double if an integer was
requested, but is there any way to get the correct value out of it? I
suppose one could read the bytes into a raw vector and then
reconstruct the number manually from that, but is there a more elegant
or built-in solution that I'm not aware of?

This is R 2.12.1 on Mac OS X.6.7 - .Machine$sizeof.long is 8.

Many thanks,
Jon



[Rd] Reading 64-bit integers
Jon Clayden