Commit c79b5b4a authored by smorabit's avatar smorabit
Browse files

bugfixes

parent 86691648
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
# hdWGCNA 0.1.1.9007 (2022-07-20)
## Added
- None

## Changes
- New warning message in `MetacellsByGroups` if there are any groups that are excluded by `min_cells`.
- Assay in Metacell seurat object is now the same as the assay supplied to `MetacellsByGroups`, instead of the default "RNA".
- `ModuleEigengenes` takes `assay` as an argument, clears up some issues with `RunHarmony`.
- `ModuleEigengenes` doesn't require a "counts" slot to be present in the given assay, but now it throws an error if the normalized data slot is missing.

# hdWGCNA 0.1.1.9006 (2022-07-14)
## Added
- None
+38 −13
Original line number Diff line number Diff line
@@ -471,6 +471,8 @@ ConstructNetwork <- function(
#' @param verbose logical indicating whether to print messages
#' @param vars.to.regress character vector of variables in seurat_obj@meta.data to regress when running ScaleData
#' @param scale.model.use model to scale data when running ScaleData choices are "linear", "poisson", or "negbinom"
#' @param pc_dim Which PC to use as the module eigengene? Default to 1.
#' @param assay Assay in seurat_obj to compute module eigengenes. Default is DefaultAssay(seurat_obj)
#' @param wgcna_name name of the WGCNA experiment
#' @keywords scRNA-seq
#' @export
@@ -485,22 +487,34 @@ ComputeModuleEigengene <- function(
  vars.to.regress = NULL,
  scale.model.use = 'linear',
  pc_dim = 1,
  assay = NULL,
  wgcna_name=NULL, ...
){

  # set as active assay if wgcna_name is not given
  if(is.null(wgcna_name)){wgcna_name <- seurat_obj@misc$active_wgcna}
  ass <- DefaultAssay(seurat_obj)

  # get the assay
  if(is.null(assay)){assay <- DefaultAssay(seurat_obj)}
  if(dim(seurat_obj@assays[[assay]]@data)[1] == 0){
    stop(paste0("Normalized data slot not found in selected assay ", assay))
  }

  # get genes in this module:
  cur_genes <- modules %>% subset(module == cur_mod) %>% .$gene_name
  print(cur_genes)

  # subset seurat object by these genes only:
  X <- GetAssayData(seurat_obj, slot='counts')[cur_genes,]
  X_dat <- GetAssayData(seurat_obj, slot='data')[cur_genes,]
  cur_seurat <- CreateSeuratObject(X, assay = ass, meta.data = seurat_obj@meta.data)
  cur_seurat <- SetAssayData(cur_seurat, slot='data', new.data=X_dat, assay=ass)
  X_dat <- GetAssayData(seurat_obj, slot='data', assay = assay)[cur_genes,]
  if(dim(seurat_obj@assays[[assay]]@counts)[1] == 0){
    X <- X_dat
  } else{
    X <- GetAssayData(seurat_obj, slot='counts', assay = assay)[cur_genes,]
  }

  # create seurat obj with just these genes
  cur_seurat <- CreateSeuratObject(X, assay = assay, meta.data = seurat_obj@meta.data)
  cur_seurat <- SetAssayData(cur_seurat, slot='data', new.data=X_dat, assay=assay)

  # scale the subsetted expression dataset:
  if(is.null(vars.to.regress)){
@@ -513,8 +527,8 @@ ComputeModuleEigengene <- function(

  # compute average expression of each gene
  cur_expr <- GetAssayData(cur_seurat, slot='data')
  expr <- t(as.matrix(cur_expr))
  averExpr <- rowSums(expr) / ncol(expr)
  expr <- t(cur_expr)
  averExpr <- Matrix::rowSums(expr) / ncol(expr)

  # run PCA with Seurat function
  cur_pca <- Seurat::RunPCA(
@@ -526,8 +540,6 @@ ComputeModuleEigengene <- function(
  pc <- cur_pca@cell.embeddings[,pc_dim]
  pc_loadings <- cur_pca@feature.loadings[,pc_dim]

  print('here')

  # correlate average expression with eigengene
  pca_cor <- cor(averExpr, pc)

@@ -537,13 +549,13 @@ ComputeModuleEigengene <- function(
    # add this PCA as its own reduction in the seurat object
    seurat_obj@reductions$ME <- Seurat::CreateDimReducObject(
      embeddings = cur_pca@cell.embeddings,
      assay = Seurat::DefaultAssay(cur_seurat)
      assay = assay
    )

    cur_harmony <- harmony::RunHarmony(
      seurat_obj,
      group.by.vars=group.by.vars,
      reduction="ME", verbose=verbose, ...
      reduction="ME", verbose=verbose, assay.use=assay, ...
    )@reductions$harmony
    ha <- cur_harmony@cell.embeddings[,pc_dim]
    ha_loadings <- cur_pca@feature.loadings[,pc_dim]
@@ -556,7 +568,7 @@ ComputeModuleEigengene <- function(
    # add harmonized PCA as its own reduction in the seurat object
    seurat_obj@reductions$ME_harmony <- Seurat::CreateDimReducObject(
      embeddings = cur_harmony@cell.embeddings,
      assay = Seurat::DefaultAssay(seurat_obj)
      assay = assay
    )

    seurat_obj <- SetMELoadings(
@@ -576,7 +588,7 @@ ComputeModuleEigengene <- function(
  # add this PCA as its own reduction in the seurat object
  seurat_obj@reductions$ME <- Seurat::CreateDimReducObject(
    embeddings = cur_pca@cell.embeddings,
    assay = Seurat::DefaultAssay(cur_seurat)
    assay = assay
  )

  seurat_obj <- SetMELoadings(
@@ -601,6 +613,8 @@ ComputeModuleEigengene <- function(
#' @param verbose logical indicating whether to print messages
#' @param vars.to.regress character vector of variables in seurat_obj@meta.data to regress when running ScaleData
#' @param scale.model.use model to scale data when running ScaleData choices are "linear", "poisson", or "negbinom"
#' @param pc_dim Which PC to use as the module eigengene? Default to 1.
#' @param assay Assay in seurat_obj to compute module eigengenes. Default is DefaultAssay(seurat_obj)
#' @param wgcna_name name of the WGCNA experiment
#' @keywords scRNA-seq
#' @export
@@ -613,6 +627,7 @@ ModuleEigengenes <- function(
  vars.to.regress = NULL,
  scale.model.use = 'linear',
  verbose=TRUE,
  assay = NULL,
  pc_dim = 1,
  wgcna_name=NULL, ...
){
@@ -627,6 +642,15 @@ ModuleEigengenes <- function(
      stop('Need to run ScaleData before running ModuleEigengenes with group.by.vars option.')
  }

  # get the assay
  if(is.null(assay)){assay <- DefaultAssay(seurat_obj)}

  # check for the data slot in this assay
  if(dim(seurat_obj@assays[[assay]]@data)[1] == 0){
    stop(paste0("Normalized data slot not found in selected assay ", assay))
  }


  me_list <- list()
  harmonized_me_list <- list()

@@ -672,6 +696,7 @@ ModuleEigengenes <- function(
      scale.model.use = scale.model.use,
      verbose=verbose,
      pc_dim = pc_dim,
      assay = assay,
      wgcna_name=wgcna_name,
      ...
    )
+32 −7
Original line number Diff line number Diff line
@@ -89,7 +89,20 @@ ConstructMetacells <- function(

  shared_old <- shared
  cell_sample <- nn_map[chosen, ]
  combs <- combn(nrow(cell_sample), 2)

  #
  # combs <- combn(nrow(cell_sample), 2)

  combs <- tryCatch(
    {combn(nrow(cell_sample), 2)},
    error = function(cond){return(NA)}
  )
  if(any(is.na(combs))){
    warning('Metacell failed')
    return(NULL)
  }


  shared <- apply(combs, 2, function(x) {
      k2 - length(unique(as.vector(cell_sample[x, ])))
  })
@@ -124,7 +137,8 @@ ConstructMetacells <- function(

  # make seurat obj:
  metacell_obj <- CreateSeuratObject(
    counts = new_exprs
    counts = new_exprs,
    assay = assay
  )

  # calculate stats:
@@ -213,7 +227,7 @@ ConstructMetacells <- function(
MetacellsByGroups <- function(
  seurat_obj, group.by=c('seurat_clusters'),
  ident.group='seurat_clusters',
  k=25, reduction='pca', assay='RNA',
  k=25, reduction='pca', assay=NULL,
  cells.use = NULL, # if we don't want to use all the cells to make metacells, good for train/test split
  slot='counts', mode = 'average', min_cells=100,
  max_shared=15,
@@ -241,6 +255,13 @@ MetacellsByGroups <- function(
    stop(paste0("Invalid reduction (", reduction, "). Reductions in Seurat object: ", paste(names(seurat_obj@reductions), collapse=', ')))
  }

  # check assay:
  if(is.null(assay)){
    assay <- DefaultAssay(seurat_obj)
  } else if(!(assay %in% names(seurat_obj@assays))){
    stop(paste0('Assay ', assay, ' not found in seurat_obj. Select a valid assay: ', paste0(names(seurat_obj@assays), collapse = ', ')))
  }

  # subset seurat object by seleted cells:
  if(!is.null(cells.use)){
    seurat_full <- seurat_obj
@@ -261,9 +282,9 @@ MetacellsByGroups <- function(
  groupings <- groupings[order(groupings)]

  # remove groups that are too small:
  # TODO: add a warning to let the user know that some groups are skipped?
  group_counts <- table(seurat_obj$metacell_grouping) >= min_cells
  warning(paste0("Removing the following groups that did not meet min_cells: ", paste(names(group_counts)[group_counts], collapse=', ')))
  groupings <- groupings[table(seurat_obj$metacell_grouping) >= min_cells]
  print(groupings)

  if(length(groupings) == 0 ){
    stop("No groups met the min_cells requirement.")
@@ -284,8 +305,6 @@ MetacellsByGroups <- function(
  seurat_list <- lapply(groupings, function(x){seurat_obj[,seurat_obj$metacell_grouping == x]})
  names(seurat_list) <- groupings

  print(meta_list)

  # construct metacells
  metacell_list <- mapply(
    ConstructMetacells,
@@ -296,6 +315,12 @@ MetacellsByGroups <- function(
  )
  names(metacell_list) <- groupings


  # remove NULL
  remove <- which(sapply(metacell_list, is.null))
  if(length(remove) > 1){
    metacell_list <- metacell_list[-remove]
  }
  # get the run stats:
  run_stats <- as.data.frame(do.call(rbind, lapply(metacell_list, function(x){x@misc$run_stats})))
  rownames(run_stats) <- 1:nrow(run_stats)
+95 −57
Original line number Diff line number Diff line
<!DOCTYPE html>
<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>License • scWGCNA</title><!-- favicons --><link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"><link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"><link rel="apple-touch-icon" type="image/png" sizes="180x180" href="apple-touch-icon.png"><link rel="apple-touch-icon" type="image/png" sizes="120x120" href="apple-touch-icon-120x120.png"><link rel="apple-touch-icon" type="image/png" sizes="76x76" href="apple-touch-icon-76x76.png"><link rel="apple-touch-icon" type="image/png" sizes="60x60" href="apple-touch-icon-60x60.png"><script src="deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link href="deps/bootstrap-5.1.0/bootstrap.min.css" rel="stylesheet"><script src="deps/bootstrap-5.1.0/bootstrap.bundle.min.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous"><!-- bootstrap-toc --><script src="https://cdn.rawgit.com/afeld/bootstrap-toc/v1.0.1/dist/bootstrap-toc.min.js"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- search --><script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/6.4.6/fuse.js" integrity="sha512-zv6Ywkjyktsohkbp9bb45V6tEMoWhzFzXis+LrMehmJZZSys19Yxf1dopHx7WzIKxr5tK2dVcYmaCk2uqdjF4A==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/autocomplete.js/0.38.0/autocomplete.jquery.min.js" integrity="sha512-GU9ayf+66Xx2TmpxqJpliWbT5PiGYxpaG8rfnBEk1LL8l1KGkRShhngwdXK1UgqhAzWpZHSiYPc09/NwDQIGyg==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1/mark.min.js" integrity="sha512-5CYOlHXGh6QpOFA/TeTylKLWfB3ftPsde7AnmhuitiTX4K5SqCLBeKro6sPS8ilsz1Q4NRx3v8Ko2IBiszzdww==" crossorigin="anonymous"></script><!-- pkgdown --><script src="pkgdown.js"></script><meta property="og:title" content="License"><meta property="og:image" content="https://smorabit.github.io/scWGCNA/logo.png"><!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>License • hdWGCNA</title><!-- favicons --><link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"><link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"><link rel="apple-touch-icon" type="image/png" sizes="180x180" href="apple-touch-icon.png"><link rel="apple-touch-icon" type="image/png" sizes="120x120" href="apple-touch-icon-120x120.png"><link rel="apple-touch-icon" type="image/png" sizes="76x76" href="apple-touch-icon-76x76.png"><link rel="apple-touch-icon" type="image/png" sizes="60x60" href="apple-touch-icon-60x60.png"><!-- jquery --><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script><!-- Bootstrap --><link href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.4.0/flatly/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"><script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script><!-- bootstrap-toc --><link rel="stylesheet" href="bootstrap-toc.css"><script src="bootstrap-toc.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous"><!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- pkgdown --><link href="pkgdown.css" rel="stylesheet"><script src="pkgdown.js"></script><meta property="og:title" content="License"><meta property="og:image" content="https://smorabit.github.io/scWGCNA/logo.png"><!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]--></head><body>
    <a href="#main" class="visually-hidden-focusable">Skip to contents</a>
    

    <nav class="navbar fixed-top navbar-light navbar-expand-lg bg-light"><div class="container">
    
    <a class="navbar-brand me-2" href="index.html">scWGCNA</a>

    <small class="nav-text text-muted me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="">0.0.0.9000</small>

    
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
<![endif]--></head><body data-spy="scroll" data-target="#toc">
    

    <div class="container template-title-body">
      <header><div class="navbar navbar-default navbar-fixed-top" role="navigation">
  <div class="container">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <span class="navbar-brand">
        <a class="navbar-link" href="index.html">hdWGCNA</a>
        <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.1.1.9006</span>
      </span>
    </div>

    <div id="navbar" class="collapse navbar-collapse ms-3">
      <ul class="navbar-nav me-auto"><li class="nav-item">
  <a class="nav-link" href="articles/scWGCNA.html">Get started</a>
    <div id="navbar" class="navbar-collapse collapse">
      <ul class="nav navbar-nav"><li>
  <a href="articles/hdWGCNA.html">Get started</a>
</li>
<li class="nav-item dropdown">
  <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true" id="dropdown-vignettes">Vignettes</a>
  <div class="dropdown-menu" aria-labelledby="dropdown-vignettes">
    <h6 class="dropdown-header" data-toc-skip>Core functionality</h6>
    <a class="dropdown-item" href="articles/basic_tutorial.html">scWGCNA basics</a>
    <a class="dropdown-item" href="articles/network_visualizations.html">Network visualization</a>
    <div class="dropdown-divider"></div>
    <h6 class="dropdown-header" data-toc-skip>Biological context for co-expression modules</h6>
    <a class="dropdown-item" href="articles/module_trait_correlation.html">Module trait correlation</a>
    <a class="dropdown-item" href="articles/enrichment_analysis.html">Enrichment analysis</a>
    <div class="dropdown-divider"></div>
    <h6 class="dropdown-header" data-toc-skip>Advanced topics</h6>
    <a class="dropdown-item" href="articles/consensus_wgcna.html">Consensus WGCNA</a>
    <a class="dropdown-item" href="articles/motif_analysis.html">Motif analysis</a>
    <a class="dropdown-item" href="articles/projecting_modules.html">Projecting modules onto new datasets</a>
    <div class="dropdown-divider"></div>
    <h6 class="dropdown-header" data-toc-skip>Other</h6>
    <a class="dropdown-item" href="articles/customization.html">Module customization</a>
    <div class="dropdown-divider"></div>
    <a class="dropdown-item" href="articles/index.html">All vignettes</a>
  </div>
<li class="dropdown">
  <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
    Vignettes
     
    <span class="caret"></span>
  </a>
  <ul class="dropdown-menu" role="menu"><li class="dropdown-header">Core functionality</li>
    <li>
      <a href="articles/basic_tutorial.html">hdWGCNA basics</a>
    </li>
<li class="nav-item">
  <a class="nav-link" href="reference/index.html">Reference</a>
    <li>
      <a href="articles/network_visualizations.html">Network visualization</a>
    </li>
<li class="nav-item">
  <a class="nav-link" href="news/index.html">News</a>
    <li class="divider">
    <li class="dropdown-header">Biological context for co-expression modules</li>
    <li>
      <a href="articles/module_trait_correlation.html">Module trait correlation</a>
    </li>
      </ul><form class="form-inline my-2 my-lg-0" role="search">
        <input type="search" class="form-control me-sm-2" aria-label="Toggle navigation" name="search-input" data-search-index="search.json" id="search-input" placeholder="Search for" autocomplete="off"></form>

      <ul class="navbar-nav"></ul></div>
    <li>
      <a href="articles/enrichment_analysis.html">Enrichment analysis</a>
    </li>
    <li class="divider">
    <li class="dropdown-header">Exploring modules in external datasets</li>
    <li>
      <a href="articles/projecting_modules.html">Projecting modules to new datasets</a>
    </li>
    <li>
      <a href="articles/module_preservation.html">Module preservation and reproducibility</a>
    </li>
    <li>
      <a href="articles/projecting_modules_cross.html">Cross-species and cross-modality analysis</a>
    </li>
    <li class="divider">
    <li class="dropdown-header">Advanced topics</li>
    <li>
      <a href="articles/consensus_wgcna.html">Consensus network analysis</a>
    </li>
    <li>
      <a href="articles/motif_analysis.html">Motif analysis</a>
    </li>
    <li class="divider">
    <li class="dropdown-header">Other</li>
    <li>
      <a href="articles/customization.html">Module customization</a>
    </li>
    <li class="divider">
    <li>
      <a href="articles/index.html">All vignettes</a>
    </li>
  </ul></li>
<li>
  <a href="reference/index.html">Reference</a>
</li>
<li>
  <a href="news/index.html">News</a>
</li>
      </ul><ul class="nav navbar-nav navbar-right"></ul></div><!--/.nav-collapse -->
  </div><!--/.container -->
</div><!--/.navbar -->

      
  </div>
</nav><div class="container template-title-body">
<div class="row">
  <main id="main" class="col-md-9"><div class="page-header">
      <img src="logo.png" class="logo" alt=""><h1>License</h1>

      </header><div class="row">
  <div class="contents col-md-9">
    <div class="page-header">
      <h1>License</h1>
    </div>

<pre>YEAR: 2022
COPYRIGHT HOLDER: scWGCNA authors
</pre>

  </main></div>
  </div>

  <div class="col-md-3 hidden-xs hidden-sm" id="pkgdown-sidebar">
    <nav id="toc" data-toggle="toc" class="sticky-top"><h2 data-toc-skip>Contents</h2>
    </nav></div>

</div>



    <footer><div class="pkgdown-footer-left">
  <p></p><p>Developed by <a href="https://smorabit.github.io" class="external-link">Samuel Morabito</a>.</p>
      <footer><div class="copyright">
  <p></p><p>Developed by <a href="https://smorabit.github.io" class="external-link">Sam Morabito</a>, <a href="https://swaruplab.bio.uci.edu/" class="external-link">Swarup Lab</a>.</p>
</div>

<div class="pkgdown-footer-right">
<div class="pkgdown">
  <p></p><p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.0.2.</p>
</div>

@@ -84,5 +121,6 @@ COPYRIGHT HOLDER: scWGCNA authors


  

  </body></html>
+61 −45

File changed.

Preview size limit exceeded, changes collapsed.

Loading