Skip to content

Instantly share code, notes, and snippets.

@abmathewks
Created December 20, 2021 21:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save abmathewks/7d9cf606480e9c20cae7a664a0b9359e to your computer and use it in GitHub Desktop.
Save abmathewks/7d9cf606480e9c20cae7a664a0b9359e to your computer and use it in GitHub Desktop.
PackageCheck <- function(USE_THESE_PACKAGES,
DEBUG = TRUE){
if(DEBUG) message("PackageCheck: Function initialized \n")
if(any(USE_THESE_PACKAGES == "")){
stop("PackageCheck: An empty string element was passed in USE_THESE_PACKAGES \n")
}
if(DEBUG) message("PackageCheck: Check for uninstalled packages \n")
FUNCTION_OUTPUT <- list()
new_packages <- USE_THESE_PACKAGES[!(USE_THESE_PACKAGES %in% installed.packages()[,"Package"])]
if(length(new_packages)) {
install.packages(new_packages)
if(DEBUG) message("PackageCheck: Importing all packages \n")
sapply(USE_THESE_PACKAGES[tolower(USE_THESE_PACKAGES) %in% tolower(.packages())], require, character.only = TRUE)
} else {
if(DEBUG) message("PackageCheck: Importing all packages \n")
sapply(USE_THESE_PACKAGES[tolower(USE_THESE_PACKAGES) %in% tolower(.packages())], require, character.only = TRUE)
}
if(DEBUG) message("PackageCheck: Collecting final output \n")
results <- data.table(package_name = names(sapply(USE_THESE_PACKAGES, require, character.only = TRUE)),
loaded = sapply(USE_THESE_PACKAGES, require, character.only = TRUE))
FUNCTION_OUTPUT[["USE_THESE_PACKAGES"]] <- USE_THESE_PACKAGES
FUNCTION_OUTPUT[["NEW_PACKAGES_TO_INSTALL"]] <- new_packages
FUNCTION_OUTPUT[["ALREADY_LOADED"]] <- USE_THESE_PACKAGES[tolower(USE_THESE_PACKAGES) %in% tolower((.packages()))]
FUNCTION_OUTPUT[["FINAL_PACKAGE_STATUS"]] <- results
if(!is.null(results) || !nrow(results) == 0){
if(DEBUG) message("PackageCheck: Package installation completed \n")
return(FUNCTION_OUTPUT)
} else {
stop("PackageCheck: Function returned an empty data set \n")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment