我需要能够通过网络有效地检索R数据。我试图检索的典型数据集包含几十万个数字。
我目前正在使用saveRDS存储数据和readRDS来检索它,这给了我不错的性能。但是由于R将每个数字存储在4个字节中,因此一些预先计算的结果仍然可以在几十MB的范围内结束。对于我的应用程序,我不需要比1或最多2字节整数更精确,所以我认为通过以另一种格式存储二进制数据可以节省一些时间。
我无法在网上找到有关以精确度降低格式有效存储R数据的任何内容。显然,我可以读取和写入我自己的二进制格式,但是我设想在R中执行该操作的开销的开销远远超过我通过减少网络上的读取/传输时间所获得的任何性能优势。
任何人都有这方面的经验吗?
答案 0 :(得分: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的好消息。