Skip to content

Commit

Permalink
Merge pull request #1 from ycl6/add-seed-to-netEmbedding
Browse files Browse the repository at this point in the history
Add seed to netEmbedding function
  • Loading branch information
ycl6 authored Sep 19, 2023
2 parents 418b660 + 9ff1bc7 commit 0ba920d
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 2 deletions.
11 changes: 9 additions & 2 deletions R/analysis.R
Original file line number Diff line number Diff line change
Expand Up @@ -643,14 +643,15 @@ computeNetSimilarityPairwise <- function(object, slot.name = "netP", type = c("f
#' @param min_dist This controls how tightly the embedding is allowed compress points together.
#' Larger values ensure embedded points are moreevenly distributed, while smaller values allow the
#' algorithm to optimise more accurately with regard to local structure. Sensible values are in the range 0.001 to 0.5.
#' @param seed An integer value indicating the random seed passed to \code{\link[base]{set.seed}}, use `NULL` to re-initializes seed. Defaults to 42.
#' @param ... Parameters passing to umap
#' @importFrom methods slot
#' @return
#' @export
#'
#' @examples
netEmbedding <- function(object, slot.name = "netP", type = c("functional","structural"), comparison = NULL, pathway.remove = NULL,
umap.method = c("umap-learn", "uwot"), n_neighbors = NULL,min_dist = 0.3,...) {
umap.method = c("umap-learn", "uwot"), n_neighbors = NULL, min_dist = 0.3, seed = 42,...) {
umap.method <- match.arg(umap.method)
if (object@options$mode == "single") {
comparison <- "single"
Expand All @@ -674,10 +675,16 @@ netEmbedding <- function(object, slot.name = "netP", type = c("functional","stru
n_neighbors <- ceiling(sqrt(dim(Similarity)[1])) + 1
}
options(warn = -1)

if (is.numeric(seed)) {
seed = as.integer(seed)
}

# dimension reduction
if (umap.method == "umap-learn") {
Y <- runUMAP(Similarity, min_dist = min_dist, n_neighbors = n_neighbors,...)
Y <- runUMAP(Similarity, min_dist = min_dist, n_neighbors = n_neighbors, seed.use = seed,...)
} else if (umap.method == "uwot") {
set.seed(seed)
Y <- uwot::umap(Similarity, min_dist = min_dist, n_neighbors = n_neighbors,...)
colnames(Y) <- paste0('UMAP', 1:ncol(Y))
rownames(Y) <- colnames(Similarity)
Expand Down
7 changes: 7 additions & 0 deletions R/utilities.R
Original file line number Diff line number Diff line change
Expand Up @@ -846,7 +846,13 @@ runUMAP <- function(
stop("Cannot find UMAP, please install through pip (e.g. pip install umap-learn or reticulate::py_install(packages = 'umap-learn')).")
}
set.seed(seed.use)

# Generate random seed for Python when NULL
if (is.null(seed.use)) {
seed.use <- sample.int(.Machine$integer.max, 1L)
}
reticulate::py_set_seed(seed.use)

umap_import <- reticulate::import(module = "umap", delay_load = TRUE)
umap <- umap_import$UMAP(
n_neighbors = as.integer(n_neighbors),
Expand All @@ -860,6 +866,7 @@ runUMAP <- function(
local_connectivity = local_connectivity,
repulsion_strength = repulsion_strength,
negative_sample_rate = negative_sample_rate,
random_state = seed.use,
a = a,
b = b,
metric_kwds = metric_kwds,
Expand Down
3 changes: 3 additions & 0 deletions man/netEmbedding.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 0ba920d

Please sign in to comment.