{r2r} now on CRAN

Introducing {r2r}, an R implementation of hash tables.

Data Structures
R
Author
Published

July 6, 2021

Introduction

My package {r2r} (v0.1.1) has been accepted by CRAN, and is now available for download from the public repository.

r2r

CRAN status R-CMD-check Codecov test coverage

r2r provides a flexible implementation of hash tables in R, allowing for:

  • arbitrary R objects as keys and values,
  • arbitrary key comparison and hash functions,
  • customizable behaviour (throw or return a default value) on missing key exceptions.

Installation

You can install the released version of r2r from CRAN with:

install.packages("r2r")

and the development version from my R-universe repository, with:

install.packages("r2r", repos = "https://vgherard.r-universe.dev")

Usage

library(r2r)
m <- hashmap()

# Insert and query a single key-value pair
m[[ "user" ]] <- "vgherard"
m[[ "user" ]]
[1] "vgherard"
# Insert and query multiple key-value pairs
m[ c(1, 2, 3) ] <- c("one", "two", "three")
m[ c(1, 3) ]
[[1]]
[1] "one"

[[2]]
[1] "three"
# Keys and values can be arbitrary R objects
m[[ lm(mpg ~ wt, mtcars) ]] <- c(TRUE, FALSE, TRUE)
m[[ lm(mpg ~ wt, mtcars) ]]
[1]  TRUE FALSE  TRUE

Getting help

For further details, including an introductory vignette illustrating the features of r2r hash maps, you can consult the r2r website. If you encounter a bug, want to suggest a feature or need further help, you can open a GitHub issue.

Comparison with hash

CRAN package {hash} also offers an implementation of hash tables based on R environments. The two tables below offer a comparison between {r2r} and {hash} (for more details, see the benchmarks Vignette)

Features supported by {r2r} and {hash}.
Feature r2r hash
Basic data structure R environment R environment
Arbitrary type keys X
Arbitrary type values X X
Arbitrary hash function X
Arbitrary key comparison function X
Throw or return default on missing keys X
Hash table inversion X
Performances of {r2r} and {hash} for basic hash table operations.
Task Comparison
Key insertion {r2r} ~ {hash}
Key query {r2r} < {hash}
Key deletion {r2r} << {hash}

Reuse

Citation

BibTeX citation:
@online{gherardi2021,
  author = {Gherardi, Valerio},
  title = {\{R2r\} Now on {CRAN}},
  date = {2021-07-06},
  url = {https://vgherard.github.io/posts/2021-07-06-r2r/r2r.html},
  langid = {en}
}
For attribution, please cite this work as:
Gherardi, Valerio. 2021. “{R2r} Now on CRAN.” July 6, 2021. https://vgherard.github.io/posts/2021-07-06-r2r/r2r.html.