Как использовать RProtobuf для сопоставления базовых типов R или объектов SEXP

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

заранее спасибо


person Chris Hinshaw    schedule 27.09.2013    source источник
comment
Я обнаружил, что код Rhipe делает то же самое, что и я. github.com/saptarshiguha/RHIPE/blob/master/ код/R/источник/   -  person Chris Hinshaw    schedule 28.09.2013


Ответы (1)


Мы интегрировали универсальную схему Protocol Buffer для объектов R из RHIPE в 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: эффективная сериализация данных на разных языках в R

person MurrayStokely    schedule 22.02.2014
comment
Вау, я только что закончил делать то же самое. Я интегрировал его в jni, чтобы использовать его в своем кластере Hadoop. Я столкнулся с некоторыми проблемами при преобразовании факторов INTSXP, но нашел некоторые подсказки в Rcpp. Спасибо за обновление, я проверю RProtoBuf 0.4 и посмотрю, смогу ли я включить его в свой код. - person Chris Hinshaw; 22.02.2014