From 2ddb8a081910a1697d2ab0caf180982d74f6dd6f Mon Sep 17 00:00:00 2001 From: Craig Williams Date: Wed, 29 Nov 2023 17:02:38 +0000 Subject: [PATCH] Slightly less clunky handling of stringsAsFactors --- DESCRIPTION | 2 +- R/add_package.R | 6 ++---- R/compile_imports.R | 15 ++++++++++++--- R/fetch_available_archives.R | 7 +++++-- R/list_depends.R | 5 ++++- R/restore.R | 10 ++++++---- R/snapshot_create.R | 5 ++++- 7 files changed, 34 insertions(+), 16 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 7ff9ab7..864ac4e 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: Rpacman Type: Package Title: Very simple package manager for R -Version: 1.0.9 +Version: 1.0.10 Date: 2022-05-31 Authors@R: person("Craig", "Williams", email = "craig@avsdev.uk", role = c("aut", "cre")) URL: https://avsdev.uk/R/Rpacman diff --git a/R/add_package.R b/R/add_package.R index bee15d1..2796f82 100644 --- a/R/add_package.R +++ b/R/add_package.R @@ -2,10 +2,8 @@ #' Add a package to the project. #' -#' @param packageName boolean Only refer to the pacman library, do not use -#' any user library paths -#' @param installOpts boolean Only refer to the pacman library, do not use -#' any user library paths +#' @param packageName character Name of the package to add +#' @param installOpts list Options for installing the package #' add_package <- function(packageName = NULL, installOpts = list(Ncpus = parallel::detectCores())) { if (is.null(packageName)) { diff --git a/R/compile_imports.R b/R/compile_imports.R index 6f2630b..55d9997 100644 --- a/R/compile_imports.R +++ b/R/compile_imports.R @@ -7,6 +7,9 @@ #' @import parallel .solve_missing_imports <- function(missingImports, installOpts = list(Ncpus = parallel::detectCores())) { + old_opt <- options(stringsAsFactors = FALSE) + on.exit(options(old_opt)) + importsFormat <- data.frame(list( package_name = unlist(lapply(missingImports$package, format_str, width = 35)), req_ver = unlist(lapply(missingImports$req_version, format_str, width = 12)), @@ -66,17 +69,20 @@ ))) } - do.call(rbind, c(fixedImports, stringsAsFactors = FALSE)) + do.call(rbind, fixedImports) } .install_order <- function(dependsTree) { + old_opt <- options(stringsAsFactors = FALSE) + on.exit(options(old_opt)) + dependsPackages <- lapply(unique(dependsTree$package), function(p) { package <- dependsTree[dependsTree$package == p,] package <- package[package$generation == max(package$generation),] package <- package[1,c("package", "version", "generation")] return(package) }) - dependsPackages <- do.call(rbind, c(dependsPackages, stringsAsFactors = FALSE)) + dependsPackages <- do.call(rbind, dependsPackages) dependsOrder <- sort(dependsPackages$generation, index.return = T, decreasing = T)$ix dependsOrder <- dependsPackages[dependsOrder,] @@ -101,6 +107,9 @@ #' import sources. #' @export compile_imports <- function(custom_sources = empty_sources(), installOpts = list(Ncpus = parallel::detectCores())) { + old_opt <- options(stringsAsFactors = FALSE) + on.exit(options(old_opt)) + CORE_PACKAGES <- c( "base", "compiler", "datasets", "graphics", "grDevices", "grid", "methods", "parallel", "splines", "stats", "stats4", "tcltk", "tools", "utils" @@ -172,7 +181,7 @@ compile_imports <- function(custom_sources = empty_sources(), installOpts = list # Cancelled return(invisible(NULL)) } - customImports <- rbind(customImports, extraImports, stringsAsFactors = FALSE) + customImports <- rbind(customImports, extraImports) } coreDeps <- dependsSources[dependsSources$in_core,] diff --git a/R/fetch_available_archives.R b/R/fetch_available_archives.R index c728033..e763677 100644 --- a/R/fetch_available_archives.R +++ b/R/fetch_available_archives.R @@ -1,18 +1,21 @@ # Requires utils.R .process_dist_archive <- function(dist_fn, fn) { + old_opt <- options(stringsAsFactors = FALSE) + on.exit(options(old_opt)) + dist_con <- gzfile(dist_fn, "rb") on.exit(close(dist_con), add = TRUE) archive <- readRDS(dist_con) archive <- lapply(archive, function(pkg) { packageVersions <- gsub("^([^/]+)/[^_]+_(.+).tar.gz", "\\1%%\\2", rownames(pkg)) packageVersions <- strsplit(packageVersions, "%%") - packageVersions <- do.call(rbind, c(packageVersions, stringsAsFactors = FALSE)) + packageVersions <- do.call(rbind, packageVersions) pkg[,c("package","version")] <- packageVersions sortOrder <- sort(pkg$version, index.return = TRUE)$ix pkg[sortOrder,c("package", "version")] }) - archive <- do.call(rbind, c(archive, stringsAsFactors = FALSE)) + archive <- do.call(rbind, archive) rownames(archive) <- 1:nrow(archive) write_con <- gzfile(fn, "wb") saveRDS(archive, write_con) diff --git a/R/list_depends.R b/R/list_depends.R index 7d24ff5..c818b7d 100644 --- a/R/list_depends.R +++ b/R/list_depends.R @@ -1,5 +1,8 @@ .list_depends <- function(packages, gen) { + old_opt <- options(stringsAsFactors = FALSE) + on.exit(options(old_opt)) + allPackages <- utils::installed.packages() allPackages <- as.data.frame(allPackages, stringsAsFactors = FALSE) packages <- allPackages[allPackages$Package %in% packages,] @@ -39,7 +42,7 @@ dependsNext <- sort(unique(dependsNext)) if (length(dependsNext) > 0) { packagesNext <- .list_depends(dependsNext, gen + 1) - packages <- rbind(packages, packagesNext, stringsAsFactors = FALSE) + packages <- rbind(packages, packagesNext) } return(packages) diff --git a/R/restore.R b/R/restore.R index 34616c5..f1d31d2 100644 --- a/R/restore.R +++ b/R/restore.R @@ -61,6 +61,9 @@ #' @import parallel #' @export restore <- function(totalIsolation = FALSE, installOpts = list(Ncpus = parallel::detectCores()), parallel = FALSE) { + old_opt <- options(stringsAsFactors = FALSE) + on.exit(options(old_opt)) + activate(totalIsolation) get_cran_repo() @@ -80,9 +83,8 @@ restore <- function(totalIsolation = FALSE, installOpts = list(Ncpus = parallel: simplePackages <- as.data.frame( apply( rbind( - do.call(rbind, c(requiredPackages$direct, stringsAsFactors = FALSE)), - do.call(rbind, c(requiredPackages$indirect, stringsAsFactors = FALSE)), - stringsAsFactors = FALSE + do.call(rbind, requiredPackages$direct), + do.call(rbind, requiredPackages$indirect) ), 2, unlist @@ -90,7 +92,7 @@ restore <- function(totalIsolation = FALSE, installOpts = list(Ncpus = parallel: stringsAsFactors = FALSE ) customPackages <- as.data.frame( - do.call(rbind, c(requiredPackages$custom, stringsAsFactors = FALSE)), + do.call(rbind, requiredPackages$custom), stringsAsFactors = FALSE ) diff --git a/R/snapshot_create.R b/R/snapshot_create.R index 9a0a0f3..a1c9fab 100644 --- a/R/snapshot_create.R +++ b/R/snapshot_create.R @@ -11,10 +11,13 @@ #' @import parallel #' @export snapshot_create <- function(installOpts = list(Ncpus = parallel::detectCores())) { + old_opt <- options(stringsAsFactors = FALSE) + on.exit(options(old_opt)) + lastSnapshot <- snapshot_latest() customSources <- empty_sources() if (!is.null(lastSnapshot) && "custom" %in% names(lastSnapshot$packages)) { - customSources <- rbind(customSources, lastSnapshot$packages$custom, stringsAsFactors = FALSE) + customSources <- rbind(customSources, lastSnapshot$packages$custom) } packages <- compile_imports(customSources, installOpts) names(packages) <- c("core", "direct", "indirect", "custom", "install_order")