2012-03-26 82 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