knitr::opts_chunk$set(echo = TRUE)

List Approach (USE)

sloop::ftype(list)
sloop::otype(list())
funs <- list(
  half = function(x) x / 2,
  double = function(x) x * 2
)

funs$half(2)
new_list <- function(l = list()){
  stopifnot(is.list(l))
  l
}

new_list(list(a = 1))
# new_list("x")

Both works

# With constructor
extract_what <- new_list(list(
  digits = function(x) stringr::str_extract(x, "[:digit:]+"),
  chars = function(x) stringr::str_extract(x, "[:alpha:]+")

))
# No constructor
extract_what <- list(
  digits = function(x) stringr::str_extract(x, "[:digit:]+"),
  chars = function(x) stringr::str_extract(x, "[:alpha:]+")

)

extract_what$digits(c("1a", "2c"))
extract_what$chars("1a")

extract_what$digits()

Function Factory

test_regex <- list(digits = "[:digit:]+",
                   chars = "[:alpha:]+")

Function to extract regex

extract_thisss <- function(nm){
  function(x){
    stringr::str_extract(x, test_regex[[nm]])
  }
}
## Maunal
extract_this <- list(
  "digits" = extract_thisss("digits"),
  "chars" =  extract_thisss("chars")
)

extract_this$digits("a1")
extract_this$chars("a1")
### Auto
new_extract_this <- function() {
  names(test_regex) %>%
    setNames(names(test_regex)) %>%
    purrr::map(extract_thisss)
}

extract_this <- new_extract_this()

extract_this$digits("a1")
extract_this$chars("a1")

Don't work, dont' know why

new_extract_this <- function() {

  nms <- names(test_regex)
  out <- vector("list", length(test_regex))

  for (i in  seq_along(nms)) {

    nm <- nms[[i]]
    out[[i]] <- extract_thisss(nm)
  }

  names(out) <- nms
  out
}

extract_this <- new_extract_this()

extract_this$digits("a1")
extract_this$chars("a1")

Knitr Approach

knitr::opts_chunk$get()
sloop::otype(knitr::opts_chunk)
class(knitr::opts_chunk)
sloop::otype(knitr::opts_chunk$set)
sloop::ftype(knitr::opts_chunk$set)
class(knitr::opts_chunk$set)


Lightbridge-KS/labChartHRV documentation built on June 12, 2022, 3:21 p.m.