Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 17 additions & 6 deletions {{ cookiecutter.project_name }}/scripts/r/_setup.R
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
# Install (if missing) and attach packages from CRAN or Bioconductor. When install = FALSE, missing packages raise an
# error instead of being installed, since installing is unsafe/undesired in a multi-worker run, for example.
load_library <- function(packages, source = c("CRAN", "Bioconductor"), install = TRUE) {
# Install (if missing) and attach packages from CRAN, Bioconductor, or GitHub (given as "owner/repo"). When
# install = FALSE, missing packages raise an error instead of being installed, since installing is unsafe/undesired in a
# multi-worker run, for example.
load_library <- function(packages, source = c("CRAN", "Bioconductor", "github"), install = TRUE) {
source <- match.arg(source)
is_installed <- vapply(packages, requireNamespace, logical(1), quietly = TRUE)
if (source == "github") {
package_names <- vapply(strsplit(packages, "/"), `[`, character(1), 2)
} else {
package_names <- packages
}
is_installed <- vapply(package_names, requireNamespace, logical(1), quietly = TRUE)
missing_packages <- packages[!is_installed]
if (length(missing_packages) > 0) {
if (!install) {
Expand All @@ -15,14 +21,19 @@ load_library <- function(packages, source = c("CRAN", "Bioconductor"), install =
}
if (source == "CRAN") {
install.packages(missing_packages, repos = "https://cloud.r-project.org")
} else {
} else if (source == "Bioconductor") {
if (!requireNamespace("BiocManager", quietly = TRUE)) {
install.packages("BiocManager", repos = "https://cloud.r-project.org")
}
BiocManager::install(missing_packages, update = FALSE, ask = FALSE)
} else if (source == "github") {
if (!requireNamespace("pak", quietly = TRUE)) {
install.packages("pak", repos = "https://cloud.r-project.org")
}
pak::pak(missing_packages)
}
}
for (package_name in packages) {
for (package_name in package_names) {
library(package_name, character.only = TRUE)
}
}
Loading