R/validatePackage.R

Defines functions validatePackage0 validatePackage

#' Check for valid package names.
#'
#' @param packages Character. Vector of package name(s).
#' @noRd

validatePackage <- function(packages) {
  check <- unlist(lapply(packages, function(x) {
    class(try(pkgsearch::cran_package(x), silent = TRUE))
  }))
  
  if (any(check == "try-error")) {
    out <- data.frame(package = packages, pkgsearch = check != "try-error")
    if ("R" %in% out$package) {
      out[out$package == "R", "pkgsearch"] <- TRUE
    }
  } else {
    out <- data.frame(package = packages, pkgsearch = TRUE)
  }
  out
}

#' Check for valid package names (scrape CRAN).
#'
#' @param packages Character. Vector of package name(s).
#' @param check.archive Logical. Include archive when validating package. This is computationally expensive because it scrapes https://cran.r-project.org/src/contrib/Archive/.
#' @noRd

validatePackage0 <- function(packages, check.archive = TRUE) {
  url <- "https://cloud.r-project.org/"
  cran <- as.data.frame(utils::available.packages(repos = url),
    stringsAsFactors = FALSE)

  # Platform specific packages
  # By default, utils::available.packages() excludes non-applicable packages.
  if (.Platform$OS.type == "windows") {
    unix.package <- c("bigGP", "bigReg", "CommT", "corrcoverage", "cronR",
      "doMC", "exif", "gcbd", "ieeeround", "kmcudaR", "littler", "nice",
      "PACVr", "permGPU", "qtbase", "R4dfp", "RAppArmor", "RcppGetconf",
      "Rdsm", "Rip46", "Rpoppler", "rPython", "rrd", "RSvgDevice", "rsyslog",
      "RVowpalWabbit", "snpStatsWriter", "solarius", "spp", "ssh.utils",
      "uaparserjs", "unix")
    pkgs <- c(cran$Package, unix.package)

  } else {
    windows.package <- c("BiplotGUI", "blatr", "excel.link", "installr",
      "KeyboardSimulator", "MDSGUI", "R2PPT", "R2wd", "RInno", "RWinEdt",
      "spectrino", "taskscheduleR")
    pkgs <- c(cran$Package, windows.package)
  }

  if (check.archive) {
    archive <- setdiff(marchivePackages(), pkgs)
    pkgs <- c(pkgs, archive, "R")
  } else pkgs <- c(pkgs, "R")

  if (any(packages %in% pkgs == FALSE)) {
    list(invalid = packages[packages %in% pkgs == FALSE],
         valid = packages[packages %in% pkgs])
  }
}
lindbrook/packageRank documentation built on April 20, 2024, 5:42 a.m.