[R] Need 64-bit integers on 32-bit platform
    Earl F. Glynn 
    efg at stowers-institute.org
       
    Tue May 22 00:38:02 CEST 2007
    
    
  
I'm using the latest R on Windows XP:
> R.version
               _
platform       i386-pc-mingw32
arch           i386
os             mingw32
system         i386, mingw32
status
major          2
minor          5.0
year           2007
month          04
day            23
svn rev        41293
language       R
version.string R version 2.5.0 (2007-04-23)
I understand this:
> .Machine$integer.max
[1] 2147483647
> .Machine$sizeof.longlong
[1] 8
So how can I get a "longlong" (i.e., 64-bit = 8-byte integers) in my 
environment?  Where is there no storage.mode of "longlong" or "int64"?
I'm reading electrophysiology data with a time stamp that's in a 64-bit 
integer (it's a microsecond clock count) but I'm getting negative values 
returned in R:
# Why no warning if this call doesn't return an 8-byte integer?
TimeStamp   <- readBin(connection, integer(), size=8,  1)
[1] -311761023
[1] -311756172
I can get the hex values of these numbers like this:
TimeStamp   <- readBin(connection, raw(),       8)
[1] 81 e7 6a ed 01 00 00 00
[1] 74 fa 6a ed 01 00 00 00
I can see what these number should be by converting to decimal in Excel:
=HEX2DEC("01ed6ae781")
8278173569
=HEX2DEC("01ed6afa74")
8278178420
How can I get these 8-byte integers in R so I don't have to use this ugly 
kludge?
# KLUDGE
TimeStamp   <- readBin(connection, integer(), size=4,  2)
> TimeStamp
[1] -311761023          1
# Convert integers to doubles since a double has larger range for integers 
than 32-bit integers:
>storage.mode(TimeStamp) <- "double"
# This seems to work, but is too ugly:
> TimeStamp[2]*2^32 + (2^32 + TimeStamp[1])
[1] 8278173569
Can anyone suggest a better way?
Thanks for any suggestions.
efg
Earl F. Glynn
Stowers Institute for Medical Research
    
    
More information about the R-help
mailing list