如何使用RProtobuf映射R基本类型或SEXP对象

时间:2013-09-27 20:35:03

标签: r protocol-buffers

我认为这是可能的,但我正在寻找一种使用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;
}

我刚刚嘲笑它,所以它可能会有错误,但这是我正在考虑的概念,并没有考虑像Doubles这样的事情,这似乎是一个坏主意。是否可能是使用字节类型和反序列化另一端的列的更好解决方案。不知道如何解决这个问题,更多知识渊博的人会非常感激反馈。

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

提前致谢

1 个答案:

答案 0 :(得分:2)

我们已将来自RHIPE的R对象的catch-all Protocol Buffer架构集成到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: Efficient Cross-Language Data Serialization in R