1

我认为这是可能的,但我正在寻找一种使用 rprotobuf 包在 R 中映射基本类型的方法。我想要的是创建一个与 Rserve 非常相似的网络/服务器,但使用协议缓冲区来序列化数据而不是 Rserve 的 QAP 协议。我的问题是如何将 data.frame 之类的东西映射到协议缓冲区中。这是一个我希望它看起来像的示例,但如果我以错误的方式进行操作,请告诉我。

message TextCell {
   required string name = 1;
}

message NumericCell {
   repeated int32 num 1;
}

message TextColumn {
   repeated TextCell text 1;
}

message NumericColumn {
   repeated NumericCell number 1;
}

message DataFrame {
  optional NumericColumn numbericColumn = 1;
  optional TextColumn textColumns = 2;
}

我刚才模拟了这个,所以它可能会有错误,但这是我正在研究的概念,它没有考虑到像双打这样的东西,这似乎是一个坏主意。使用字节类型并反序列化另一侧的列可能是一个更好的解决方案。尚不确定如何解决此问题,并且知识渊博的人将不胜感激。

请注意,由于它们的存储效率和使用更多语言的可能性,我希望使用协议缓冲区,但 QAP 协议没有任何问题。它非常快速和高效。

提前致谢

4

1 回答 1

2

我们已将 RHIPE 中的 R 对象的包罗万象的协议缓冲区模式集成到 RProtoBuf 和新函数中serialize_pbunserialize_pb并将任意 R 对象(如 data.frames)转换为协议缓冲区。例如:

msg <- tempfile();
serialize_pb(iris, msg);
obj <- unserialize_pb(msg);
identical(iris, obj);

此功能是在最初提出您的问题后出现的RProtoBuf 0.4中引入的。请参阅我们 JSS 论文的预印本,该论文介绍了 arXiv 上的这些新功能:RProtoBuf:R 中的高效跨语言数据序列化

于 2014-02-22T06:19:06.143 回答