Statis...coding(3pm)

πŸ’– NAME πŸ’–

Statistics::R::IO::QapEncoding β€” functions for parsing Rserve packets, bestie. (And yes, this is that Statis...coding(3pm) page you saw in the header β€” the title got truncated, it's giving mystery, but it's this one, iykyk.)

✨ VERSION ✨

version 1.0002 β€” iconic, we love a version number πŸ’…

🌸 SYNOPSIS 🌸

use Statistics::R::IO::QapEncoding qw( decode );

# Assume $data comes from an Rserve response body
my ($rexp, $state) = @{ decode($data) }
    or die "couldn't parse";

# If we're reading a QAP response, there should be no data left
# unparsed
die 'Unread data remaining' unless $state->eof;

# the result of the unserialization is a REXP
say $rexp;

# REXPs can be converted to the closest native Perl data type
print $rexp->to_pl;

πŸ¦‹ DESCRIPTION πŸ¦‹

Okay so, this module is the one doing the actual reading of serialized R objects encoded with Rserve's QAP protocol, and then converting them into a Statistics::R::REXP. Lowkey the backbone energy.

But heads up, bestie: you are not expected to use it directly. It's normally wrapped by evalRserve in Statistics::R::IO and eval in Statistics::R::IO::Rserve. So it's like, backstage crew, not the main character β€” but the show does not happen without it. πŸŽ€


πŸŽ€ SUBROUTINES πŸŽ€

  • decode $data β€” constructs a Statistics::R::REXP object from its serialization in $data. Hands you back a pair: the object itself, and the Statistics::R::IO::ParserState sitting at the end of serialization.
  • decode_sexp, decode_int β€” parsers for Rserve's DT_SEXP and DT_INT data types, respectively.
  • dt_sexp_data β€” parses the body of an Rserve DT_SEXP object by parsing its header (the XT_ type and length) and its content (which is done by sequencing unpack_sexp_info and sexp_data).
  • unpack_sexp_info β€” parser for the header (made of the XT_* type, flags, and object length) of a serialized SEXP. Returns a hash with keys object_type, has_attributes, and length, each one corresponding to the field in R serialization described in the QAP1 protocol description at http://www.rforge.net/Rserve/dev.html.
  • sexp_data $obj_info β€” parser for a QAP-serialized R object, using the object type stored in $obj_info hash's object_type key to pick the correct parser for that particular type.
  • intsxp, langsxp, lglsxp, listsxp, rawsxp, dblsxp, cplxsxp, strsxp, symsxp, vecsxp, expsxp, closxp, s4sxp β€” parsers for the corresponding R SEXP-types. Yes, that's thirteen of them, they really said "we contain multitudes". πŸ’€
  • nosxp β€” parser for Rserve's XT_UNKNOWN type, which encodes an R SEXP-type that does not have a corresponding representation in QAP.
  • maybe_attributes $object_info β€” convenience parser for SEXP attributes, which are serialized as a tagged pairlist XT_LIST_TAG followed by a SEXP for the object value. Attributes are stored only if $object_info indicates their presence. Returns a pair of $object_info and a hash reference to the attributes, as returned by tagged_pairlist_to_attribute_hash.
  • tagged_pairlist β€” parses a pairlist (optionally tagged) and returns an array where each element is a hash containing keys value (the REXP of the pairlist element) and, optionally, tag.
  • tagged_pairlist_to_rexp_hash β€” converts a pairlist to a REXP hash whose keys are the pairlist's element tags and whose values are the pairlist elements themselves.
  • tagged_pairlist_to_attribute_hash β€” converts object attributes, which are serialized as a pairlist with the attribute name in the element's tag, to a hash that can be used as the attributes argument to Statistics::R::REXP constructors.

Some attributes are serialized using a compact encoding (for instance, when a table's row names are just integers 1:nrows), and this function will decode them to a complete REXP. Cute, efficient, slay. ✨


πŸ’€ BUGS AND LIMITATIONS πŸ’€

There are no known bugs in this module. Please see Statistics::R::IO for bug reporting.

Not me reporting zero bugs, that's a clean sheet fr fr. 🫢

🫢 SUPPORT 🫢

See Statistics::R::IO for support and contact information.


πŸ‘‘ AUTHOR πŸ‘‘

Davor Cubranic <cubranic@stat.ubc.ca> β€” the icon, the legend, the moment. 🌟


This software is Copyright (c) 2017 by University of British Columbia.

This is free software, licensed under:

  The GNU General Public License, Version 3, June 2007

And that's the whole page, bestie β€” born from perl v5.34.0, dated 2022-02-10, and filed under User Contributed Perl Documentation. Go forth and parse those packets. πŸ’…πŸ¦‹πŸŒΈ