我使用大型R對象進行工作,這些R對象有時會被我們本地網絡上的多個人以只讀方式訪問。例如,參考類或R6 object可能用於存儲與特定模型相關的驗證結果,並且它可能有許多隻讀驗證相關的方法。我希望繼續使用R來保持工作流的同質性,並避免轉向語言(比如Java或Python),這樣更適合解決我即將提出的問題。R有沒有「memcpy」?
而不是重新實例化,這些物品或串行輸出(例如,RDS或redis)每次我們需要他們在一個新的R會話時間去閱讀他們,這將是更有效地保留一些服務器上運行的活性R-過程可在網絡上訪問,然後從該服務器將「memcpy」對象加載到本地計算機上:某種類型的準確模式object pooling。注意這些有時是合法的非表格R對象,這些對象很難例如翻譯成database-backed object(可能仍然較慢)。
我知道R維護堆中範圍內的所有信息,所以這可能在沒有gc控制的情況下很難做到,但是可能在一個字節上「虹吸」遠離其他R會話的對象使用某種潛在的C魔法逐字節級別?我不太瞭解R如何管理內存中的對象以知道如何做到這一點,但也許有一個或一些現有代碼片段可以提供靈感。
我也願意穿上緊身衣,並對上述對象進行限制,這會使這項任務變得更加簡單(例如,只能引用特定的包,或者方法定義不能是令這個任務變得不可能的怪異閉包,甚至只能是S3對象)。
編輯:我只是意識到我沒有看着RProtoBuf。這可能合適嗎?
也許R控制檯的修改版本,可以連接到一個R「服務器」的地方,並是根據引擎罩交談該會話,同時保持不同的用戶空間和可用於傳遞對象像一個共享空間這個。 – 2014-10-30 03:20:17
你描述的內容與古典'memcpy'很少有關 - 具有網絡功能的'memcpy'也可以串行化對象並通過線路發送,類似於你使用RDS對象所做的事情。那麼爲什麼不使用後者呢?你說這效率不高,但我沒有看到任何先驗原因。 – 2014-12-08 22:29:42