Nothing
#' Select scorecard data variables.
#'
#' This function is used to select the variables returned in the final dataset.
#'
#' @param sccall Current list of parameters carried forward from prior
#' functions in the chain (ignore)
#' @param ... Desired variable names separated by commas (not case sensitive)
#' @examples
#' \dontrun{
#' sc_select(UNITID)
#' sc_select(UNITID, INSTNM)
#' sc_select(unitid, instnm)
#' }
#' @export
sc_select <- function(sccall, ...) {
## vars in ... to list
vars <- lapply(lazyeval::lazy_dots(...), function(x) bquote(.(x[["expr"]])))
## give to _ version
sc_select_(sccall, vars)
}
#' @describeIn sc_select Standard evaluation version of
#' \code{\link{sc_select}} (\code{vars} must be string or vector
#' of strings when using this version)
#'
#' @param vars Character string of variable name or vector of
#' character string variable names
#'
#' @examples
#' \dontrun{
#' sc_select_("UNITID")
#' sc_select_(c("UNITID", "INSTNM"))
#' sc_select_(c("unitid", "instnm"))
#'
#' ## stored in object
#' vars_to_pull <- c("unitid","instnm")
#' sc_select(vars_to_pull)
#' }
#'
#' @export
sc_select_ <- function(sccall, vars) {
suppressWarnings({
## check first argument
confirm_chain(sccall)
## confirm has a least one variable
if (missing(vars) || length(vars) < 1) {
stop("Incomplete sc_select()! You must select at least one variable.",
call. = FALSE)
}
## look for tidyselect helpers
shl <- c("starts_with","ends_with","contains","matches","everything")
col <- ifelse(sccall[["dfvars"]], "dev_friendly_name", "varname")
for (i in 1:length(vars)) {
v <- vars[[i]]
if (is.call(v)) {
v <- as.list(parse(text = gsub("^_", "zzz_", v))) # no leading hyphens
v[[1]] <- as.character(v[[1]])
if (v[[1]] != "everything") {
v[[2]] <- gsub("^zzz_", "_", as.character(v[[2]]))
}
if (v[[1]] %in% shl) {
if (v[[1]] != "everything") {
fun <- get(v[[1]], asNamespace("tidyselect"))
index <- do.call(fun, list(v[[2]], vars = dict[[col]]))
v <- dict[index, col]
} else {
v <- unique(dict[[col]])
}
} else {
stop("Can only use the following tidyselect helpers:\n",
paste(" - ", paste0(shl, "()"), collapse="\n"),
call. = FALSE)
}
}
vars[[i]] <- v
}
## unlist vars
vars <- unlist(vars, use.names = FALSE)
## confirm variables exist in dictionary
for (v in vars) {
if (!sc_dict(tolower(as.character(v)), confirm = TRUE)) {
stop("Variable \"" %+% v %+% "\" not found in dictionary. "
%+% "Please check your spelling or search dictionary: "
%+% "?sc_dict()", call. = FALSE)
}
}
## store vars in order for later ordering
sccall[["select_order"]] <- trimws(unlist(strsplit(toString(vars), split = ",")))
## convert to developer-friendly names
if (!sccall[["dfvars"]]) {
vars <- vapply(vars, function(x) { sc_hash[[tolower(as.character(x))]] },
character(1), USE.NAMES = FALSE)
}
## grab categories
cats <- vapply(vars, function(x) { sc_hash[[as.character(x) %+% "_c"]] },
character(1), USE.NAMES = FALSE)
## paste, clean, and return
vars <- paste(cats %+% "." %+% vars, collapse = ",")
vars <- gsub("root.", "", vars, fixed = TRUE)
sccall[["select"]] <- "&_fields=" %+% vars
sccall
})
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.