R/coclust_graph_cov.r

Defines functions mcell_coclust_from_graph_resamp

Documented in mcell_coclust_from_graph_resamp

#' Compute metacell using resampling iterations of graph cover k-means-like approach
#'
#' @param mc_id id of metacell object to be added
#' @param graph_id a knn graph object id into scdb
#' @param mat_id a matrix object id
#' @param min_mc_size target minimum metacell size. This is only an approximation and smaller MC may be returned by the algorithm
#' @param resamp_n number of resampling iterations
#' 
#' @export
#'
#' @export

mcell_coclust_from_graph_resamp = function(coc_id, 
		graph_id, 
		min_mc_size, p_resamp, n_resamp)
{
	old_seed = .set_seed(get_param("mc_rseed"))

	tgs_clust_cool = get_param("scm_tgs_clust_cool")
	tgs_clust_burn = get_param("scm_tgs_clust_burn_in")

	graph = scdb_cgraph(graph_id)
	if(is.null(graph)) {
		stop("MC-ERR: cell graph id ", graph_id, " is missing when running add_mc_from_graph")
	}
	message("running bootstrap to generate cocluster")
	edges = graph@edges
	colnames(edges) = c("col1", "col2", "weight")

if(0) {
orig_levels = levels(edges$col1)
edges$col1 <- as.character(edges$col1)
edges$col2 <- as.character(edges$col2)
reduced_levels <- unique(c(as.character(edges$col1),as.character(edges$col2)))
edges$col1<-factor(as.character(edges$col1), levels=reduced_levels)
edges$col2<-factor(as.character(edges$col2), levels=reduced_levels)
}

	K = round(nrow(edges)/length(graph@cell_names))

	resamp = tgs_graph_cover_resample(edges, knn = K, min_mc_size, cooling = tgs_clust_cool, burn_in = tgs_clust_burn, p_resamp = p_resamp, n_resamp = n_resamp, method="full")

#TEMP - fixing a bug with trailing 0 factor values
	resamp$co_cluster = resamp$co_cluster[
						as.numeric(resamp$co_cluster$node1)>0,]
	message("done resampling")
if(0) {
resamp$co_cluster$node1 = factor(as.character(resamp$co_cluster$node1), 
															levels=orig_levels)
resamp$co_cluster$node2 = factor(as.character(resamp$co_cluster$node2), 
															levels=orig_levels)
}

	scdb_add_coclust(coc_id, 
			tgCoClust(graph_id=graph_id, coclust = resamp$co_cluster, n_samp=resamp$samples))

	.restore_seed(old_seed)
}
tanaylab/metacell documentation built on Oct. 19, 2023, 1:01 p.m.