2012-03-26 79 views
1

我需要能够通过网络有效检索R数据。我试图检索的典型数据集包含数十万个数字。降低精度的数字数据

我目前使用saveRDS来存储数据和readRDS来检索它,这给了我不俗的表现。但是由于R将每个数字存储在4个字节中,因此一些预先计算的结果仍然可能会在几十MB的范围内。对于我的应用程序,我不需要比1或最多2字节的整数更高的准确性,所以我认为可以通过以另一种格式存储二进制数据来节省一些时间。

我一直没能找到任何关于有效存储R数据的精确格式。很显然,我可以读写自己的二进制格式,但我想到通过减少网络上的读取/传输时间,在R中执行该操作的开销将远远超过我获得的任何性能优势。

任何人都有这方面的经验?

回答

2

我开始编写一个包,pack来帮助解决这样的问题。我正在使用它来支持另一个是now-defunct service的API。

如果您只想要一个1字节的整数(< 256),您可以使用as.raw并发送结果;然后在接收数据的机器上使用as.integer

> as.raw(255) 
[1] ff 
> as.integer(as.raw(255)) 
[1] 255 

对于2个字节的整数,你可以使用pack并将结果发送;然后在接收数据的机器上使用unpack

> library(pack) 
> pack("v", 255) 
[1] ff 00 
> pack("v", 256) 
[1] 00 01 
> unpack("v", as.raw(255)) 
[[1]] 
[1] 255 

我从来没有用过它,但我听说过关于RProtoBuf的好东西。

+0

谢谢! 'as.raw'对我来说还不够准确,但是你的包中的'short' int可能只是个诀窍! – 2012-03-26 19:40:36