README.md

enum

Lifecycle:
experimental

Installation

remotes::install_github("shunsambongi/enum")

Example

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)

Extracting values

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"

Updating values

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'))


shunsambongi/enum documentation built on Nov. 11, 2019, 6:46 a.m.