2013-09-27 30 views
1

我认为这是可能的,但我正在寻找一种方法来使用rprotobuf包映射R中的基类型。我想要的是创建一个非常类似于Rserve的网络/服务器,但使用协议缓冲区来序列化数据而不是Rserve的QAP协议。我的问题是如何将data.frame映射到协议缓冲区。这里有一个我希望它看起来像的例子,但是让我知道如果我以错误的方式去做。如何使用RProtobuf来映射R基类型或SEXP对象

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协议。它非常快速和高效。

在此先感谢

+0

我发现Rhipe代码做了几乎完全一样是我想做的事情。 https://github.com/saptarshiguha/RHIPE/blob/master/code/R/src/rexp.proto –

回答

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: Efficient Cross-Language Data Serialization in R

+0

哇,我刚刚做完同样的事情。我已经将它集成到jni中,以便我可以在我的hadoop群集中使用它。我遇到了一些转换INTSXP因素的问题,但在Rcpp中发现了一些提示。感谢您的更新,我会检查出RProtoBuf 0.4,看能不能将其纳入我的代码。 –