require(SuperCell)
require(igraph)
#' rom Scimplify result to subsampling
#'
#' @export
SCimple2Subsampling <- function(X, SC, gamma, seed = 12345){
N.c <- ncol(X)
N.SC <- round(N.c/gamma)
n.pc <- SC$n.pc
k.knn <- SC$k.knn
N.keep.genes <- length(SC$genes.use)
set.seed(seed)
keep.cells.idx <- sort(sample(N.c, N.SC))
keep.cells.ids <- colnames(X)[keep.cells.idx]
X <- X[, keep.cells.ids]
keep.genes.var <- sort(apply(X, 1, var), decreasing = T)[1:N.keep.genes]
keep.genes <- names(keep.genes.var[keep.genes.var>0])
X <- X[keep.genes, ]
X.for.pca <- scale(Matrix::t(X))
if(N.SC > 100){
PCA <- irlba::irlba(X.for.pca, nv = max(n.pc))
PCA$x <- PCA$u %*% diag(PCA$d)
} else {
PCA <- prcomp(X.for.pca, rank. = max(n.pc), scale. = F, center = F)
}
sc.nw <- build_knn_graph(X = PCA$x[,n.pc], k = k.knn, from = "coordinates", use.nn2 = TRUE, dist_method = "euclidean")
res <- list(graph.singlecell = sc.nw,
gamma = gamma,
n.pc = n.pc,
k.knn = k.knn,
genes.use = keep.genes,
cells.use.ids = keep.cells.ids,
cells.use.idx = keep.cells.idx,
supercell_size = rep(1, length(keep.cells.idx)),
simplification.algo = "Subsampling")
return(res)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.