File: available.R

package info (click to toggle)
r-cran-biocmanager 1.30.20%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 348 kB
  • sloc: sh: 13; makefile: 2
file content (46 lines) | stat: -rw-r--r-- 1,571 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#' Discover packages available for installation.
#'
#' The function lists all packages available from \code{repositories()} when
#' no pattern is provided. This usually includes CRAN and Bioconductor
#' packages. The function can also be used to check for package name
#' availability. Common use cases include annotation package lookups by
#' organism short name (e.g., "hsapiens").
#'
#' @param pattern character(1) pattern to filter (via
#'     `grep(pattern=...)`) available packages; the filter is not case
#'     sensitive.
#'
#' @param include_installed logical(1) When `TRUE`, include installed
#'     packages in list of available packages; when `FALSE`, exclude
#'     installed packages.
#'
#' @return `character()` vector of package names available for
#'     installation.
#'
#' @examples
#' if (interactive()) {
#'   avail <- BiocManager::available()
#'   length(avail)
#'
#'   BiocManager::available("bs.*hsapiens")
#' }
#' @md
#' @export
available <-
    function(pattern = "", include_installed = TRUE)
{
    stopifnot(
        is.character(pattern), length(pattern) == 1L, !is.na(pattern),
        is.logical(include_installed), length(include_installed) == 1L,
        !is.na(include_installed)
    )

    answer <- character()
    repos <- .repositories_filter(repositories())
    if (length(repos))
        answer <- rownames(.inet_available.packages(repos = repos))
    answer <- sort(grep(pattern, answer, value = TRUE, ignore.case = TRUE))
    if (!include_installed)
        answer <- setdiff(answer, rownames(installed.packages()))
    answer
}