我认为这是可能的,但我正在寻找一种使用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协议没有任何问题。它非常快速有效。
提前致谢
答案 0 :(得分:2)
我们已将来自RHIPE的R对象的catch-all Protocol Buffer架构集成到RProtoBuf和新函数serialize_pb
和unserialize_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