The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
The hashtable packages provides three implementations of hash tables and hash maps:
std::unordered_map and
std::unordered_set from C++, in functions
hash_table() and hash_set(),hash_fm_table() and hash_fm_set(),hash_env_table() and
hash_env_set().They share the same user interface.
Three ways to create hash tables:
library(hashtable)
h1 = hash_table(letters, 1:26)
h2 = hash_fm_table(letters, 1:26)
h3 = hash_env_table(letters, 1:26)
h1## A hash table [hash_unordered_map] with 26 key-value (integer) pairs
## z => 26
## y => 25
## x => 24
## ......
## c => 3
## b => 2
## a => 1
## A hash table [hash_fm_table] with 26 key-value (integer) pairs
## a => 1
## b => 2
## c => 3
## ......
## x => 24
## y => 25
## z => 26
## A hash table [hash_env_table] with 26 key-value (integer) pairs
## i => 9
## j => 10
## k => 11
## ......
## f => 6
## g => 7
## h => 8
The user interfaces for the two methods are the same. We only
demonstrate using h1.
Get all keys:
## [1] "z" "y" "x" "w" "v" "u" "t" "s" "q" "p" "o" "n" "m" "r" "l" "k" "j" "i" "h"
## [20] "g" "f" "e" "d" "c" "b" "a"
Get all values:
## [1] 26 25 24 23 22 21 20 19 17 16 15 14 13 18 12 11 10 9 8 7 6 5 4 3 2
## [26] 1
Get a subset of values by specifying keys:
## [1] 1 2 3
Get a single value using $, [[ or
[:
## [1] 1
## [1] 1
## [1] 1 2
Test whether keys are in the hash table:
## [1] TRUE TRUE FALSE
Delete key-value pairs:
## [1] FALSE FALSE
Insert new key-value pairs, or modify key-value pairs if they already exist:
## [1] 100
## [1] -1
## [1] 0
Insert or modify key-value pairs using $<-,
[[<- or [<-:
## [1] 20
## [1] -100
## [1] -1 -2 -3
In previous examples, values are atomic vectors. It is basically the same if values are more general list.
## A hash table [hash_unordered_map] with 2 key-value (list) pairs
## b => character [1] text
## a => integer [1] 1
## A hash table [hash_unordered_map] with 4 key-value (list) pairs
## c => numeric [1] 3.14
## b => character [1] text
## d => complex value (lm)
## a => integer [1] 1
Convert between hash table and named vector or list:
## b a
## 2 1
## $b
## [1] "text"
##
## $a
## [1] 1
## A hash table [hash_unordered_map] with 2 key-value (integer) pairs
## b => 2
## a => 1
## A hash table [hash_unordered_map] with 2 key-value (list) pairs
## b => character [1] text
## a => integer [1] 1
Hash sets are hash tables with no value associated. There are also three ways to create hash sets.
## A hash set [hash_unordered_set] with 26 keys
Get all keys:
## [1] "z" "y" "x" "w" "v" "u" "t" "s" "q" "p" "o" "n" "m" "r" "l" "k" "j" "i" "h"
## [20] "g" "f" "e" "d" "c" "b" "a"
Hash set has no value associated, so calling
hash_value() throws an error.
## Error in hash_values(h1): hash_unordered_set has no values.
Test whether keys are in the hash set:
## [1] TRUE FALSE
Add new keys:
## [1] TRUE
Delete keys:
## [1] FALSE
Hash sets are basically used to test whether keys exist, so we let
$, [[ and [ to return
TRUE or FALSE to represent whether keys
exist.
## [1] TRUE
## [1] TRUE
## [1] FALSE
## [1] TRUE TRUE FALSE
If assigning TRUE, new keys are added to the hash set
(if they do not exist), and if assigning FALSE,
corresponding keys are deleted.
## [1] FALSE
## [1] TRUE
Convert between vectors (where elements are unique) and hash sets:
## [1] "z" "y" "foo" "x" "w" "v" "u" "t" "s" "q" "p" "o"
## [13] "n" "m" "r" "l" "k" "j" "i" "h" "g" "f" "e" "d"
## [25] "c" "b"
## A hash set [hash_unordered_set] with 26 keys
Although sharing the same user interface, the hash table created by
hash_fm_table() allows to modify the values if
corresponding keys already exist.
But it does not allow to delete or create key-value pairs.
## Error in .local(h, keys, ...): hash_fm_table is not allowed to insert new keys.
## Error in hash_delete(h, "a"): hash_fm is not allowed to modify.
The hash set created by hash_fm_set() does not allow to
delete or create keys.
## Error in hash_delete(x, i): hash_fm is not allowed to modify.
## Error in .local(h, keys, ...): hash_fm_set is not allowed to modify.
## R version 4.3.3 (2024-02-29)
## Platform: x86_64-apple-darwin20 (64-bit)
## Running under: macOS 26.5.1
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRlapack.dylib; LAPACK version 3.11.0
##
## locale:
## [1] C/zh_CN.UTF-8/zh_CN.UTF-8/C/zh_CN.UTF-8/zh_CN.UTF-8
##
## time zone: Europe/Berlin
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] hashtable_1.0.0
##
## loaded via a namespace (and not attached):
## [1] digest_0.6.35 R6_2.5.1 fastmatch_1.1-4 fastmap_1.1.1
## [5] xfun_0.43 cachem_1.0.8 knitr_1.45 htmltools_0.5.8.1
## [9] rmarkdown_2.26 lifecycle_1.0.4 cli_3.6.2 sass_0.4.9
## [13] jquerylib_0.1.4 compiler_4.3.3 tools_4.3.3 evaluate_0.23
## [17] bslib_0.7.0 Rcpp_1.0.12 yaml_2.3.8 rlang_1.1.3
## [21] jsonlite_1.8.8
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.