Nothing
#' prepFunctionName
#'
#' Function to prepare a function call for a given type and prefix
#'
#' @aliases prepFunctionName
#' @param type name of calculation/source
#' @param prefix Type of calculations. Available options are "download" (source download),
#' "read" (source read), "correct" (source corrections), "convert" (source conversion to ISO countries),
#' "calc" (further calculations), and "full" (collections of calculations)
#' @param ignore vector of arguments which should be ignored (not be part of the function call)
#' @param error_on_missing boolean deciding whether a missing type should throw an error or return NULL
#' @return A function call as character to the specified function with corresponding package as attribute
#' @author Jan Philipp Dietrich
#' @seealso \code{\link{readSource}}, \code{\link{setConfig}}
#' @examples
#'
#' print(madrat:::prepFunctionName("Tau", "read"))
#' print(madrat:::prepFunctionName("TauTotal", "calc"))
#' print(madrat:::prepFunctionName("EXAMPLE", "full"))
#' @importFrom utils tail
prepFunctionName <- function(type, prefix = "calc", ignore = NULL,
error_on_missing = TRUE) { # nolint: object_name_linter.
getCalc <- getCalculations(prefix = prefix)
if (!(type %in% getCalc$type)) {
if (error_on_missing) {
stop("Type \"", type, "\" is not a valid output type. Check getCalculations(\"",
prefix, "\") for available types!")
} else {
return(NULL)
}
}
# creates functionname and checks that all arguments
# expected by the function are actually beeing provided
name <- getCalc$call[getCalc$type == type]
package <- getCalc$package[getCalc$type == type]
if (length(name) > 1) {
name <- as.character(tail(name, 1))
package <- as.character(tail(package, 1))
warning("More than one function found for type \"", type, "\" and prefix \"", prefix,
"\". Use last occurrence (package \"", package, "\")")
if (package == ".GlobalEnv" && type %in% c("TauTotal", "Tau")) {
stop("Cannot substitute package internal function for type \"", type, "\" and prefix \"",
prefix, "\" with function in global environment. Please use other function name instead!")
}
}
# extract arguments which agree between the given function and its corresponding wrapper function
# (because they have to be mentioned specifically in the function call)
wrapper <- list(calc = "calcOutput",
download = "downloadSource",
read = "readSource",
correct = "readSource",
convert = "readSource",
full = "retrieveData")
if (prefix %in% c("convert", "correct")) {
add <- "x"
} else {
add <- NULL
}
fformals <- names(formals(eval(parse(text = name))))
wformals <- c(add, names(formals(as.character(wrapper[prefix]))))
formals <- intersect(wformals, fformals)
fcomplete <- all(fformals %in% formals)
formals <- setdiff(formals, "...")
if (!fcomplete && !("..." %in% wformals)) {
warning("Some arguments of function \"", name, "\" cannot be adressed by the wrapper (\"",
paste0(fformals[!(fformals %in% formals)], collapse = "\", \""), "\")!")
}
formals <- setdiff(formals, ignore)
args <- paste(formals, formals, sep = "=")
if ("..." %in% wformals && !fcomplete) {
args <- c(args, "...")
}
out <- paste0(name, "(", paste(args, collapse = ", "), ")")
attr(out, "formals") <- formals
attr(out, "package") <- package
if (package == ".GlobalEnv") {
attr(out, "pkgcomment") <- ".GlobalEnv"
} else {
attr(out, "pkgcomment") <- paste(package, unname(getNamespaceVersion(package)))
}
return(out)
}
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.