make_inputs_impl <- function(...) {
inputs <- exprs(..., .ignore_empty = "trailing")
return_list_if_empty(inputs)
nms <- names2(inputs)
missing_name <- nms == ""
value_is_missing <- purrr::map_lgl(inputs, is_missing)
value_is_symbol <- purrr::map_lgl(inputs, is_symbol)
no_name_no_value <- any(missing_name & value_is_missing) # (x, , z)
has_name_no_value <- any(!missing_name & value_is_missing) # (x = , y)
no_name_bad_value <- any(missing_name & !value_is_symbol) # ("a")
if (no_name_no_value | has_name_no_value | no_name_bad_value) {
abort("Unexpected inputs")
}
no_defaults <- missing_name & value_is_symbol # (x)
nms <- purrr::pmap(list(inputs, nms, no_defaults), function(input, name, no_default) {
if (no_default) as_string(input) else name
})
inputs <- purrr::map2(inputs, no_defaults, function(input, no_default) {
if (no_default) missing_arg() else input
})
out <- set_names(inputs, nms)
out
}
update_inputs_impl <- function(old, new, .envir = caller_env()) {
new <- purrr::map_if(new, is_null, as_box)
out <- list_modify(old, !!!new)
out <- purrr::map_if(out, is_box, unbox)
return_list_if_empty(out)
out
}
remove_inputs_impl <- function(old, ...) {
message <- "All inputs to remove must be specified by symbols"
remove_something_impl(old, ..., .abort_message = message)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.