remotes::install_github("shunsambongi/enum")
library(enum)
clrs <- enum(
NAVY = "#001F3F",
BLUE = "#0074D9",
AQUA = "#7FDBFF",
TEAL = "#39CCCC",
OLIVE = "#3D9970",
GREEN = "#2ECC40",
LIME = "#01FF70",
YELLOW = "#FFDC00",
ORANGE = "#FF851B",
RED = "#FF4136",
MAROON = "#85144B",
FUCHSIA = "#F012BE",
PURPLE = "#B10DC9",
BLACK = "#111111",
GRAY = "#AAAAAA",
SILVER = "#DDDDDD",
WHITE = "#FFFFFF"
)
print(clrs)
#> <enum<character>>
#> NAVY = #001F3F
#> BLUE = #0074D9
#> AQUA = #7FDBFF
#> TEAL = #39CCCC
#> OLIVE = #3D9970
#> GREEN = #2ECC40
#> LIME = #01FF70
#> YELLOW = #FFDC00
#> ORANGE = #FF851B
#> RED = #FF4136
#> MAROON = #85144B
#> FUCHSIA = #F012BE
#> PURPLE = #B10DC9
#> BLACK = #111111
#> GRAY = #AAAAAA
#> SILVER = #DDDDDD
#> WHITE = #FFFFFF
scales::show_col(clrs, labels = FALSE)
You can extract values from the enum
in many different ways. Notice
that we are not subsetting, just extracting.
clrs["RED", "GREEN", "BLUE"]
#> [1] "#FF4136" "#2ECC40" "#0074D9"
clrs$RED
#> [1] "#FF4136"
clrs[["RED"]]
#> [1] "#FF4136"
"#FFFFFF" %in% clrs
#> [1] TRUE
enum_extract(clrs, c("GREEN", "YELLOW"))
#> [1] "#2ECC40" "#FFDC00"
enum_keys(clrs)
#> [1] "NAVY" "BLUE" "AQUA" "TEAL" "OLIVE" "GREEN" "LIME"
#> [8] "YELLOW" "ORANGE" "RED" "MAROON" "FUCHSIA" "PURPLE" "BLACK"
#> [15] "GRAY" "SILVER" "WHITE"
enum_vals(clrs)
#> [1] "#001F3F" "#0074D9" "#7FDBFF" "#39CCCC" "#3D9970" "#2ECC40" "#01FF70"
#> [8] "#FFDC00" "#FF851B" "#FF4136" "#85144B" "#F012BE" "#B10DC9" "#111111"
#> [15] "#AAAAAA" "#DDDDDD" "#FFFFFF"
You can update enum
values if you really need to. However, you can’t
add or remove keys.
abc <- enum(A = "a", B = "b", C = "c")
abc <- enum_update(abc, C = "sea") # you need to reassign
abc
#> <enum<character>>
#> A = a
#> B = b
#> C = sea
abc$B <- "bee" # this is inplace
abc
#> <enum<character>>
#> A = a
#> B = bee
#> C = sea
ggplot2
enums
can be used in many ways with ggplot2
, for example with manual
scales.
library(ggplot2)
#> Warning: package 'ggplot2' was built under R version 3.6.1
plot <- ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length, color = Species)) +
geom_point() +
theme_bw()
plot + scale_color_manual(values = clrs)
plot + scale_color_manual(values = clrs["RED", "GREEN", "BLUE"])
plot + scale_color_manual(values = with_enum(clrs, c(
setosa = PURPLE,
versicolor = ORANGE,
virginica = YELLOW
)))
iris_clrs <- enum(
setosa = clrs$AQUA,
versicolor = clrs$FUCHSIA,
virginica = clrs$LIME
)
plot + scale_color_manual(values = enum_vec(iris_clrs))
dbplyr
enums
also work in sql queries using dbplyr
library(dplyr, warn.conflicts = FALSE)
#> Warning: package 'dplyr' was built under R version 3.6.1
library(dbplyr, warn.conflicts = FALSE)
#> Warning: package 'dbplyr' was built under R version 3.6.1
df <- lazy_frame(
color = "red"
)
df %>%
filter(color %in% clrs) %>%
show_query()
#> <SQL>
#> SELECT *
#> FROM `df`
#> WHERE (`color` IN ('#001F3F', '#0074D9', '#7FDBFF', '#39CCCC', '#3D9970', '#2ECC40', '#01FF70', '#FFDC00', '#FF851B', '#FF4136', '#85144B', '#F012BE', '#B10DC9', '#111111', '#AAAAAA', '#DDDDDD', '#FFFFFF'))
df %>%
filter(color %in% !!clrs["RED", "BLUE"]) %>%
show_query()
#> <SQL>
#> SELECT *
#> FROM `df`
#> WHERE (`color` IN ('#FF4136', '#0074D9'))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.