Dict
is a R package which implements a key-value
dictionary data structure based on R6 class. It is designed to be
similar usages with other languages’ dictionary implementations
(e.g. Python).
R’s vector
and list
, of course can have
names, so you can get and set value by a name (key) like a dictionary.
Using regular data structure must be a recommended way in the most of
cases. But, if you are interested in the following characteristics, this
package is for you!
install.packages("Dict")
# Or the the development version from GitHub:
# install.packages("devtools")
::install_github("five-dots/Dict") devtools
To instantiate a dict, you can pass any length of key-value pairs to the initialize method.
library(Dict)
<- Dict$new(
ages Charlie = 40L,
Alice = 30L,
Bob = 25L,
.class = "integer",
.overwrite = TRUE
) ages
# A tibble: 3 x 2
key value
<chr> <list>
1 Charlie <int [1]>
2 Alice <int [1]>
3 Bob <int [1]>
dict()
can be used instead of Dict$new()
as some IDEs cloud not show R6’s function arguments hint..class
specifies what kind of objects the dictionary
can contains. Default “any” means the dict cloud have any type of
value..overwrite
controls the behavior when the same key is
added.tbl_df
from tibble package
whose key is a character column and value is a list column. You can use
various existing tooling for data.frame
or
tibble
to manipulate dict items.A value can be access by both Dict$get()
or
`[`
with a character key or integer index of items
rows.
"Bob"]
ages[$get("Bob")
ages$get(3L) ages
[1] 25
[1] 25
[1] 25
If no key found, value of default
is returned.
"Michael", default = 30] ages[
[1] 30
Adding a item also can be done by R6 methods Dict$add()
or `[<-`
.
"John"] <- 18L # or ages$add(John = 18L)
ages["John"] ages[
[1] 18
Can be overridden if .overwrite = TRUE
(default).
"Bob"] <- 26L
ages[$get("Bob") ages
[1] 26
Remove item:
$remove("Bob") ages
Check if items contains a key:
$has("Bob") ages
[1] FALSE
Sort by keys:
$sort()
ages ages
# A tibble: 3 x 2
key value
<chr> <list>
1 Alice <int [1]>
2 Charlie <int [1]>
3 John <int [1]>
Clear items:
$clear()
ages ages
# A tibble: 0 x 2
# … with 2 variables: key <chr>, value <list>
Fields:
$keys
ages$values
ages$items
ages$length ages