2013-09-27 2 views
1

Я думаю, что это возможно, но я ищу способ сопоставить базовые типы в R, используя пакет rprotobuf. Я хочу создать сеть/сервер, очень похожую на Rserve, но используя протокольные буферы для сериализации данных, а не для QAP-протокола Rserve. Мой вопрос в том, как можно сопоставить что-то вроде 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

Мы интегрировали кетчуп все схемы Protocol Buffer для объектов R от RHIPE Into 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

+0

Вау, я только что закончил делать то же самое. Я включил его в jni, чтобы использовать его в своем кластере. Я столкнулся с некоторыми проблемами, преобразующими факторы INTSXP, но нашел некоторые подсказки в Rcpp. Спасибо за обновление, я проверю RProtoBuf 0.4 и посмотрю, могу ли я включить его в свой код. –

Смежные вопросы