The goal of blob is to provide a simple S3 class to represent a vector of binary objects, aka blobs.
The blob class is a lightweight wrapper around a list of raw vectors, suitable for inclusion in a data frame.
In most cases you will not need to use this package explicitly: it will be used transparently by packages that need to load BLOB columns from databases or binary file formats.
blob aims to:
blob, built on vctrs::list_of(raw()),
so that a vector of binary objects can live in a data frame column.new_blob() for a list of raw vectors, blob() for individual ones,
as_blob() for casting and validate_blob() for checking.vec_ptype2() and vec_cast() methods so that combining, subsetting and coercion follow the usual rules.blob[12 B] on its own and as <raw 12 B> in a tibble column.It is explicitly not trying to:
# The easiest way to get blob is to install the whole tidyverse:
install.packages("tidyverse")
# Alternatively, install just blob:
install.packages("blob")
# Or the development version from GitHub:
# install.packages("pak")
# pak::pak("tidyverse/blob")
install.packages("blob", repos = c('https://tidyverse.r-universe.dev', 'https://cloud.r-project.org'))
To create a blob, use blob(), new_blob() or as_blob():
library(blob)
x1 <- charToRaw("Good morning")
x2 <- as.raw(c(0x48, 0x65, 0x6c, 0x6c, 0x6f))
new_blob(list(x1, x2))
#> <blob[2]>
#> [1] blob[12 B] blob[5 B]
blob(x1, x2)
#> <blob[2]>
#> [1] blob[12 B] blob[5 B]
as_blob(c("Good morning", "Good evening"))
#> <blob[2]>
#> [1] blob[12 B] blob[12 B]
# Inside a tibble, `pillar_shaft.blob()` decides how the column looks.
tibble::tibble(x = blob(x1, x2))
#> # A tibble: 2 × 1
#> x
#> <blob>
#> 1 <raw 12 B>
#> 2 <raw 5 B>
Please note that the 'blob' project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.