<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>CMMR Developer News</title>
<link>https://cmmr.github.io/</link>
<atom:link href="https://cmmr.github.io/index.xml" rel="self" type="application/rss+xml"/>
<description></description>
<generator>quarto-1.8.27</generator>
<lastBuildDate>Sat, 28 Feb 2026 00:00:00 GMT</lastBuildDate>
<item>
  <title>Announcing h5lite and hdf5lib: High-Performance HDF5 Storage for the CRAN Ecosystem</title>
  <dc:creator>Daniel P. Smith</dc:creator>
  <link>https://cmmr.github.io/posts/2026-02-28_hdf5_r_pkgs/</link>
  <description><![CDATA[ 






<div style="text-align:center">
<p><img src="https://cmmr.github.io/posts/2026-02-28_hdf5_r_pkgs/banner.png" style="width:100%; max-width:1024px; height:auto;" alt="Connecting R and HDF5"></p>
</div>
<p>The HDF5 hierarchical storage format is the industry standard for managing massive, complex datasets in <strong>genomics</strong>, <strong>environmental science</strong>, and <strong>quantitative finance</strong>. It serves as the data backbone for everything from NASA’s Earth-observing missions to next-generation sequencing. Since these are the exact domains where R is the primary language for analysis, the lack of reliable HDF5 support on CRAN has been a significant bottleneck. For years, developers have been trapped in a “dependency minefield,” forced to choose between heavy Bioconductor requirements or brittle system configurations that frequently fail during installation.</p>
<p>We are excited to announce <a href="https://cran.r-project.org/package=h5lite"><strong>h5lite</strong></a> and <a href="https://cran.r-project.org/package=hdf5lib"><strong>hdf5lib</strong></a>, now available on CRAN. These packages provide a zero-dependency interface to HDF5 2.0, finally bringing world-class hierarchical storage to the R ecosystem in a way that is suitable for both interactive analysis and redistributable R package development.</p>
<section id="what-is-hdf5-the-supercharged-r-list-analogy" class="level2">
<h2 class="anchored" data-anchor-id="what-is-hdf5-the-supercharged-r-list-analogy">What is HDF5? The “Supercharged R List” Analogy</h2>
<p>If you aren’t familiar with HDF5, the easiest way to think about it is as a <strong>persistent, cross-platform R <code>list</code></strong>. In R, a <code>list</code> is powerful because it can hold a matrix of numbers, a data frame, and a nested list all in one object. HDF5 brings this same flexibility to your hard drive, allowing you to:</p>
<ul>
<li><p><strong>Store Heterogeneous Data Together:</strong> Keep arrays, tidy data frames, and raw bytes inside a single <code>.h5</code> file.</p></li>
<li><p><strong>Perform Efficient Partial I/O:</strong> HDF5 allows you to “reach in” and read only the specific slice of a dataset you need. This makes it possible to work with multi-gigabyte objects that would otherwise crash your R session.</p></li>
<li><p><strong>Preserve Metadata with Attributes:</strong> HDF5 attributes are the direct analog to R attributes. You can attach custom metadata - like units, timestamps, or descriptions - directly to any dataset or group.</p></li>
<li><p><strong>Organize with Groups:</strong> Just as you nest lists in R, HDF5 uses a filesystem-like hierarchy of “groups” to organize your data.</p></li>
<li><p><strong>Share Across Languages:</strong> Because HDF5 is a universal standard, that “list” you saved in R can be opened in Python as a dictionary or in Julia as a named tuple, with all your attributes and dimensions intact.</p></li>
</ul>
</section>
<section id="the-motivation-navigating-the-dependency-minefield" class="level2">
<h2 class="anchored" data-anchor-id="the-motivation-navigating-the-dependency-minefield">The Motivation: Navigating the Dependency Minefield</h2>
<p>The primary goal of <code>h5lite</code> and <code>hdf5lib</code> is to eliminate the “Dependency Minefield” that R users often face. Historically, existing HDF5 interfaces in R presented significant hurdles for anyone trying to build a stable, redistributable package:</p>
<ul>
<li><p><strong>The Bioconductor Barrier:</strong> Relying on the <code>rhdf5</code> ecosystem requires your users to navigate <code>BiocManager</code>, which complicates the standard <code>install.packages()</code> workflow and can cause issues on CRAN check farms.</p></li>
<li><p><strong>System Library Fragility:</strong> The <code>hdf5r</code> package typically requires users to manually install <code>libhdf5-dev</code> on their OS. This is notoriously difficult for Windows users and creates an unpredictable environment where your package might fail if the user has a mismatched library version.</p></li>
</ul>
<p>By providing a <strong>guaranteed, zero-dependency environment</strong>, these packages allow R developers to simply add <code>LinkingTo: hdf5lib</code> to their <code>DESCRIPTION</code> file. For the first time, you can ship a package that uses HDF5 and be certain it will “just work” for every user, on every platform, immediately upon installation.</p>
</section>
<section id="choosing-your-path-which-package-to-use" class="level2">
<h2 class="anchored" data-anchor-id="choosing-your-path-which-package-to-use">Choosing Your Path: Which Package to Use?</h2>
<p>Depending on whether you are analyzing data or building tools for others, your entry point into this ecosystem will differ:</p>
<ul>
<li><p><strong>Interactive Users:</strong> You only need <strong><code>h5lite</code></strong>. It provides a simplified R interface (<code>h5_read</code>, <code>h5_write</code>) to quickly store and retrieve data, removing the need to manage complex HDF5 objects or system dependencies.</p></li>
<li><p><strong>Package Developers:</strong> You have two powerful ways to leverage this infrastructure:</p>
<ul>
<li><strong><code>Imports: h5lite</code></strong>: Use this to call the streamlined R interface within your own package functions.</li>
<li><strong><code>LinkingTo: hdf5lib</code></strong>: Use this if your package contains C or C++ code and requires direct, high-performance access to the native HDF5 C API.</li>
</ul></li>
</ul>
<p><img src="https://cmmr.github.io/posts/2026-02-28_hdf5_r_pkgs/h5lite.png" align="right" width="179" height="200" alt="h5lite logo"></p>
</section>
<section id="the-interface-h5lite" class="level2">
<h2 class="anchored" data-anchor-id="the-interface-h5lite">The Interface: <a href="https://cmmr.github.io/h5lite/"><code>h5lite</code></a></h2>
<p><code>h5lite</code> is an opinionated, streamlined interface that handles the complexities of <a href="https://cmmr.github.io/h5lite/articles/data-types.html">type mapping and interoperability</a> so you can focus on your data. Below is a summary of the type translation logic handled by the h5lite interface:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 18%">
<col style="width: 21%">
<col style="width: 60%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">R Data Type</th>
<th style="text-align: left;">HDF5 Equivalent</th>
<th style="text-align: left;">Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;"><strong>Numeric</strong></td>
<td style="text-align: left;"><em>variable</em></td>
<td style="text-align: left;">Selects optimal type: <code>uint8</code>, <code>float32</code>, etc.</td>
</tr>
<tr class="even">
<td style="text-align: left;"><strong>Logical</strong></td>
<td style="text-align: left;"><code>uint8</code></td>
<td style="text-align: left;">Stored as 0 (FALSE) or 1 (TRUE).</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><strong>Character</strong></td>
<td style="text-align: left;"><code>string</code></td>
<td style="text-align: left;">Variable or fixed-length; UTF-8 or ASCII.</td>
</tr>
<tr class="even">
<td style="text-align: left;"><strong>Complex</strong></td>
<td style="text-align: left;"><code>complex</code></td>
<td style="text-align: left;">Native HDF5 2.0+ complex numbers.</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><strong>Raw</strong></td>
<td style="text-align: left;"><code>opaque</code></td>
<td style="text-align: left;">Raw bytes / binary data.</td>
</tr>
<tr class="even">
<td style="text-align: left;"><strong>Factor</strong></td>
<td style="text-align: left;"><code>enum</code></td>
<td style="text-align: left;">Integer indices with label mapping.</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><strong>integer64</strong></td>
<td style="text-align: left;"><code>int64</code></td>
<td style="text-align: left;">64-bit signed integers via <code>bit64</code> package.</td>
</tr>
<tr class="even">
<td style="text-align: left;"><strong>POSIXt</strong></td>
<td style="text-align: left;"><code>string</code></td>
<td style="text-align: left;">ISO 8601 string (<code>YYYY-MM-DDTHH:MM:SSZ</code>).</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><strong>List</strong></td>
<td style="text-align: left;"><code>group</code></td>
<td style="text-align: left;">Recursive container structure.</td>
</tr>
<tr class="even">
<td style="text-align: left;"><strong>Data Frame</strong></td>
<td style="text-align: left;"><code>compound</code></td>
<td style="text-align: left;">Table of mixed types.</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><strong>NULL</strong></td>
<td style="text-align: left;"><code>null</code></td>
<td style="text-align: left;">Creates a placeholder.</td>
</tr>
</tbody>
</table>
<section id="key-features" class="level3">
<h3 class="anchored" data-anchor-id="key-features">Key Features</h3>
<ul>
<li><p><strong>Smart Defaults:</strong> The package automatically chooses efficient storage types, such as <code>int8</code> for small integers or <code>float64</code> for vectors containing <code>NA</code> values.</p></li>
<li><p><strong>Precision Control:</strong> Use the <code>as</code> argument to explicitly request types like <code>bfloat16</code>, <code>float32</code>, or specific fixed-length strings to match external schemas.</p></li>
<li><p><strong>Transparent Interoperability:</strong> R uses column-major order while HDF5 uses row-major. <code>h5lite</code> handles these permutations automatically, ensuring your data opens correctly in Python or Julia.</p></li>
<li><p><strong>Metadata Preservation:</strong> R <code>names</code>, <code>row.names</code>, and <code>dimnames</code> are preserved as HDF5 dimension scales, maintaining your metadata across platforms.</p></li>
<li><p><strong>Smart Partial I/O (Upcoming):</strong> One of HDF5’s greatest strengths is reading small slices of massive datasets. Support for <a href="https://cmmr.github.io/h5lite/articles/partial-reading.html">“smart” partial I/O</a> is being introduced in <strong>version 2.0.0.4</strong>. This version allows you to use <code>start</code> and <code>count</code> parameters to target specific structural units without loading entire files into memory.</p></li>
</ul>
<blockquote class="blockquote">
<p><strong>Note:</strong> Version 2.0.0.3 with enhanced partial reading is currently available on <strong>GitHub</strong> for early adopters and will be submitted to CRAN following final validation.</p>
</blockquote>
<p><img src="https://cmmr.github.io/posts/2026-02-28_hdf5_r_pkgs/hdf5lib.png" align="right" width="174" height="200" alt="hdf5lib logo"></p>
</section>
</section>
<section id="the-engine-hdf5lib" class="level2">
<h2 class="anchored" data-anchor-id="the-engine-hdf5lib">The Engine: <a href="https://cmmr.github.io/hdf5lib/"><code>hdf5lib</code></a></h2>
<p>Under the hood, <code>h5lite</code> is powered by <strong><code>hdf5lib</code></strong>. While most users won’t interact with it directly, it serves as the rock-solid foundation for the entire ecosystem.</p>
<ul>
<li><p><strong>Bundled Source:</strong> <code>hdf5lib</code> bundles the complete HDF5 2.0.0 source code, compiling natively on macOS, Windows, and Linux with no external system libraries required.</p></li>
<li><p><strong>Comprehensive Compression:</strong> In the next release, <code>hdf5lib</code> will bundle <strong>gzip (zlib)</strong>, <strong>szip (libaec)</strong>, <strong>lz4</strong>, <strong>zstd</strong>, and <strong>blosc</strong>. This ensures these high-performance filters “just work” out-of-the-box on all platforms and are available to users of <code>h5lite</code>.</p></li>
<li><p><strong>Thread-Safety:</strong> Compiled with thread-safety enabled by default, allowing for <a href="https://cmmr.github.io/hdf5lib/articles/parallelism.html">safe parallel I/O</a> regardless of your chosen threading system.</p></li>
<li><p><strong>Versioning &amp; API Stability:</strong> Developers can specify <code>LinkingTo: hdf5lib (&gt;= 2.0)</code> to ensure HDF5 2.0 features are available. Built-in <a href="https://cmmr.github.io/hdf5lib/articles/api-versioning.html">API versioning</a> also safeguards your code against breaking changes in future HDF5 releases.</p></li>
</ul>
</section>
<section id="integrated-compression-support" class="level2">
<h2 class="anchored" data-anchor-id="integrated-compression-support">Integrated Compression Support</h2>
<p>To provide world-class compression while maintaining a minimal footprint and zero-dependency promise, we are integrating advanced filters directly into the engine.</p>
<ul>
<li><p><strong>Bundled Libraries:</strong> Instead of a standalone package, the <strong>gzip (zlib)</strong>, <strong>szip (libaec)</strong>, <strong>lz4</strong>, <strong>zstd</strong>, and <strong>blosc</strong> compression libraries will be bundled in the next release of <code>hdf5lib</code>.</p></li>
<li><p><strong>How it Works:</strong> <code>h5lite</code> will automatically leverage these libraries bundled within <code>hdf5lib</code> to provide seamless, high-performance compression at runtime.</p></li>
<li><p><strong>Immediate Alternatives:</strong> If you need these formats today, <code>h5lite</code> can utilize external plugins. You can point the <code>HDF5_PLUGIN_PATH</code> environment variable to the plugin directories provided by Bioconductor’s <a href="https://bioconductor.org/packages/release/bioc/html/rhdf5filters.html"><strong><code>rhdf5filters</code></strong></a> package.</p></li>
</ul>
</section>
<section id="stability-and-minimal-footprint" class="level2">
<h2 class="anchored" data-anchor-id="stability-and-minimal-footprint">Stability and Minimal Footprint</h2>
<p>Reliability is paramount for a storage interface. Both packages minimize their dependency footprint by <strong>not importing any other R packages</strong>. To ensure a stable experience, <code>h5lite</code> maintains a <strong>100% code coverage test suite</strong>. Both packages have been rigorously validated across standard CRAN platforms (Linux, Windows, macOS) and compilers (GCC, Clang).</p>
</section>
<section id="comparison-at-a-glance" class="level2">
<h2 class="anchored" data-anchor-id="comparison-at-a-glance">Comparison at a Glance</h2>
<table class="caption-top table">
<colgroup>
<col style="width: 26%">
<col style="width: 29%">
<col style="width: 24%">
<col style="width: 20%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">Feature</th>
<th style="text-align: left;">h5lite / hdf5lib</th>
<th style="text-align: left;">rhdf5 / Rhdf5lib</th>
<th style="text-align: left;">hdf5r</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;"><strong>Repository</strong></td>
<td style="text-align: left;"><strong>CRAN</strong></td>
<td style="text-align: left;">Bioconductor</td>
<td style="text-align: left;">CRAN</td>
</tr>
<tr class="even">
<td style="text-align: left;"><strong>HDF5 Version</strong></td>
<td style="text-align: left;"><strong>2.0.0 (Guaranteed)</strong></td>
<td style="text-align: left;">1.10.7 (or System)</td>
<td style="text-align: left;">System</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><strong>API Philosophy</strong></td>
<td style="text-align: left;"><strong>Streamlined</strong></td>
<td style="text-align: left;">Comprehensive</td>
<td style="text-align: left;">Comprehensive</td>
</tr>
<tr class="even">
<td style="text-align: left;"><strong>Partial I/O</strong></td>
<td style="text-align: left;"><strong>Yes (Smart/Simple)</strong></td>
<td style="text-align: left;">Yes (Low-level)</td>
<td style="text-align: left;">Yes (Low-level)</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><strong>Install Friction</strong></td>
<td style="text-align: left;"><strong>None</strong></td>
<td style="text-align: left;">BiocManager</td>
<td style="text-align: left;">System Libs</td>
</tr>
<tr class="even">
<td style="text-align: left;"><strong>Thread Safety</strong></td>
<td style="text-align: left;"><strong>Yes (Default)</strong></td>
<td style="text-align: left;">No (Default)</td>
<td style="text-align: left;">Varies</td>
</tr>
</tbody>
</table>
</section>
<section id="try-it-out" class="level2">
<h2 class="anchored" data-anchor-id="try-it-out">Try It Out</h2>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">install.packages</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"h5lite"</span>)</span>
<span id="cb1-2"></span>
<span id="cb1-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(h5lite)</span>
<span id="cb1-4">file <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tempfile</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fileext =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".h5"</span>)</span>
<span id="cb1-5"></span>
<span id="cb1-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Write various R objects with smart defaults</span></span>
<span id="cb1-7"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">h5_write</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, file, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ints"</span>)                   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Integer Vector</span></span>
<span id="cb1-8"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">h5_write</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">I</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"example"</span>), file, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"/"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">attr =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"id"</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Scalar Attribute</span></span>
<span id="cb1-9"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">h5_write</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">matrix</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">nrow =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>), file, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mtx"</span>)  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Numeric Matrix</span></span>
<span id="cb1-10"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">h5_write</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(letters), file, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"letters"</span>)     <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Factor -&gt; ENUM</span></span>
<span id="cb1-11"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">h5_write</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">a =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">b =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>), file, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"config"</span>)   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># List -&gt; GROUP</span></span>
<span id="cb1-12"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">h5_write</span>(iris, file, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"flowers/iris"</span>)           <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Data Frame -&gt; COMPOUND</span></span>
<span id="cb1-13"></span>
<span id="cb1-14"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Write with specific type coercions</span></span>
<span id="cb1-15"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">h5_write</span>(iris, file, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"flowers/coerced"</span>,</span>
<span id="cb1-16">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">as =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Sepal.Length =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"bfloat16"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.numeric =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"float32"</span>))</span>
<span id="cb1-17"></span>
<span id="cb1-18"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Inspect the file structure</span></span>
<span id="cb1-19"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">h5_str</span>(file)</span>
<span id="cb1-20"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt; /</span></span>
<span id="cb1-21"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt; ├── @id &lt;utf8[7] scalar&gt;</span></span>
<span id="cb1-22"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt; ├── mtx &lt;uint8 × 5 × 4&gt;</span></span>
<span id="cb1-23"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt; ├── letters &lt;enum × 26&gt;</span></span>
<span id="cb1-24"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt; ├── config/</span></span>
<span id="cb1-25"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt; │   ├── a &lt;uint8 × 1&gt;</span></span>
<span id="cb1-26"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt; │   └── b &lt;uint8 × 1&gt;</span></span>
<span id="cb1-27"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt; ├── ints &lt;uint8 × 10&gt;</span></span>
<span id="cb1-28"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt; └── flowers/</span></span>
<span id="cb1-29"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt;     ├── iris &lt;compound[5] × 150&gt;</span></span>
<span id="cb1-30"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt;     │   ├── $Sepal.Length &lt;float64&gt;</span></span>
<span id="cb1-31"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt;     │   ├── $Sepal.Width &lt;float64&gt;</span></span>
<span id="cb1-32"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt;     │   ├── $Petal.Length &lt;float64&gt;</span></span>
<span id="cb1-33"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt;     │   ├── $Petal.Width &lt;float64&gt;</span></span>
<span id="cb1-34"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt;     │   └── $Species &lt;enum&gt;</span></span>
<span id="cb1-35"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt;     └── coerced &lt;compound[5] × 150&gt;</span></span>
<span id="cb1-36"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt;         ├── $Sepal.Length &lt;bfloat16&gt;</span></span>
<span id="cb1-37"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt;         ├── $Sepal.Width &lt;float32&gt;</span></span>
<span id="cb1-38"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt;         ├── $Petal.Length &lt;float32&gt;</span></span>
<span id="cb1-39"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt;         ├── $Petal.Width &lt;float32&gt;</span></span>
<span id="cb1-40"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&gt;         └── $Species &lt;enum&gt;</span></span></code></pre></div></div>
<p>For a deeper dive, explore the <a href="https://cmmr.github.io/h5lite/articles/h5lite.html">Getting Started with h5lite</a> guide and the <a href="https://cmmr.github.io/hdf5lib/">hdf5lib documentation</a>.</p>


</section>

 ]]></description>
  <category>R</category>
  <category>CRAN</category>
  <category>Package</category>
  <category>HDF5</category>
  <category>Big Data</category>
  <category>Database</category>
  <guid>https://cmmr.github.io/posts/2026-02-28_hdf5_r_pkgs/</guid>
  <pubDate>Sat, 28 Feb 2026 00:00:00 GMT</pubDate>
  <media:content url="https://cmmr.github.io/posts/2026-02-28_hdf5_r_pkgs/banner.png" medium="image" type="image/png" height="42" width="144"/>
</item>
</channel>
</rss>
