引言

教程,当然是以官网为主,不过看英文笔记有挑战,简略带领大家一起学习咯:http://cole-trapnell-lab.github.io/monocle-release/docs/

值得注意的是这里展现的是monocle2版本的使用教程,因为monocle3仍然是不那么稳定。

载入必要的R包

需要自行下载安装一些必要的R包!这里就是Monocle

if (!requireNamespace("BiocManager"))
    install.packages("BiocManager")
if (!requireNamespace("monocle"))
    BiocManager::install("monocle")

加载R包

rm(list = ls()) # clear the environment
#load all the necessary libraries
options(warn=-1) # turn off warning message globally
suppressMessages(library(monocle))

创建数据集

后续分析的前提就是将数据构建成monocle需要的对象。

因此这里先介绍一下monocle需要的用来构建 CellDataSet 对象的三个数据集

并且这三个数据集要满足如下要求:

表达量矩阵必须

而且

如下是几个例子

测试数据集

该R包团队给出的例子有点可怕。

需要使用网络公共数据,取决于网速,是浙江大学郭老师的40万小鼠单细胞转录组数据。

第一个rds文件大小接近3G,太难下载了,即使侥幸下载,一般人的电脑也没办法处理它。

下载地址:

第二个csv文件也有 26.5M

MCA <- readRDS("./MCA_merged_mat.rds")
cell.meta.data <- read.csv("./MCA_All-batch-removed-assignments.csv", row.names = 1)

39855 x 405191 sparse Matrix of class “dgCMatrix”

 class(MCA)
## 这是一个对象,需要仔细理解,这里略
overlapping_cells <- intersect(row.names(cell.meta.data), colnames(MCA))
gene_ann <- data.frame(gene_short_name = row.names(MCA), row.names = row.names(MCA))

pd <- new("AnnotatedDataFrame",
          data=cell.meta.data[overlapping_cells, ])
fd <- new("AnnotatedDataFrame",
          data=gene_ann)

下面构造了一个MCA数据集的子集,基于:overlapping_cells

MCA_cds <- newCellDataSet(
  MCA[, overlapping_cells], 
  phenoData = pd,
  featureData =fd,
  expressionFamily = negbinomial.size(),
  lowerDetectionLimit=1)

save(MCA_cds,file = './MCA_cds_monocle_example.Rdata')

全部载入后的数据在R里面如下:

但是数据集实在是太大,我这里只能载入前面步骤保存的小数据集。

## 这个文件很大,我放在了Rmd路径下面。
load(file = './MCA_cds_monocle_example.Rdata')
# 所以你们运行这个代码是没有意义的,因为这个文件MCA_cds_monocle_example.Rdata仅仅是存在于我的电脑
MCA_cds
# 是一个 CellDataSet 对象, 有着24万的单细胞,演示软件用法实在是太难

这里需要学习 CellDataSet 对象,就跟之前GEO视频教程教大家的 ExpressionSet 对象类似,可以看到这里的数据集仍然是24万细胞,有点可怕。

scRNAseq R包中的数据集

比如我们选择 scRNAseq 这个R包。 这个包内置的是 Pollen et al. 2014 数据集,人类单细胞细胞,分成4类,分别是 pluripotent stem cells 分化而成的 neural progenitor cells (“NPC”) ,还有 “GW16” and “GW21” ,“GW21+3” 这种孕期细胞。

大小是50.6 MB,下载需要一点点时间,先安装加载它们。

这个数据集很出名,截止2019年1月已经有近400的引用了,后面的人开发R包算法都会在其上面做测试,比如 SinQC 这篇文章就提到:We applied SinQC to a highly heterogeneous scRNA-seq dataset containing 301 cells (mixture of 11 different cell types) (Pollen et al., 2014).

不过本例子只使用了数据集的4种细胞类型而已,因为 scRNAseq 这个R包就提供了这些,完整的数据是 23730 features, 301 samples 在 https://hemberg-lab.github.io/scRNA.seq.datasets/human/tissues/

这里面的表达矩阵是由 RSEM (Li and Dewey 2011) 软件根据 hg38 RefSeq transcriptome 得到的,总是130个文库,每个细胞测了两次,测序深度不一样。

library(scRNAseq)
## ----- Load Example Data -----
data(fluidigm)
# Set assay to RSEM estimated counts
assay(fluidigm)  <-  assays(fluidigm)$rsem_counts
ct <- floor(assays(fluidigm)$rsem_counts)
ct[1:4,1:4] 
##          SRR1275356 SRR1274090 SRR1275251 SRR1275287
## A1BG              0          0          0          0
## A1BG-AS1          0          0          0          0
## A1CF              0          0          0          0
## A2M               0          0          0         33
sample_ann <- as.data.frame(colData(fluidigm))

准备Monocle对象需要的phenotype data 和 feature data 以及表达矩阵,从 scRNAseq 这个R包里面提取这三种数据。

gene_ann <- data.frame(
  gene_short_name = row.names(ct), 
  row.names = row.names(ct)
)

pd <- new("AnnotatedDataFrame",
          data=sample_ann)
fd <- new("AnnotatedDataFrame",
          data=gene_ann)

构建Monocle后续分析的所用对象,主要是根据包的说明书,仔细探索其需要的构建对象的必备元素

注意点: 因为表达矩阵是counts值,所以注意 expressionFamily 参数

sc_cds <- newCellDataSet(
  ct, 
  phenoData = pd,
  featureData =fd,
  expressionFamily = negbinomial.size(),
  lowerDetectionLimit=1)
sc_cds
## CellDataSet (storageMode: environment)
## assayData: 26255 features, 130 samples 
##   element names: exprs 
## protocolData: none
## phenoData
##   sampleNames: SRR1275356 SRR1274090 ... SRR1275261 (130 total)
##   varLabels: NREADS NALIGNED ... Size_Factor (29 total)
##   varMetadata: labelDescription
## featureData
##   featureNames: A1BG A1BG-AS1 ... ZZZ3 (26255 total)
##   fvarLabels: gene_short_name
##   fvarMetadata: labelDescription
## experimentData: use 'experimentData(object)'
## Annotation:

下面是monocle对新构建的CellDataSet 对象的标准操作.

estimateDispersions这步的时间和电脑配置密切相关,甚至如果电脑内存不够,还会报错

library(dplyr)
colnames(phenoData(sc_cds)@data)
##  [1] "NREADS"                       "NALIGNED"                    
##  [3] "RALIGN"                       "TOTAL_DUP"                   
##  [5] "PRIMER"                       "INSERT_SZ"                   
##  [7] "INSERT_SZ_STD"                "COMPLEXITY"                  
##  [9] "NDUPR"                        "PCT_RIBOSOMAL_BASES"         
## [11] "PCT_CODING_BASES"             "PCT_UTR_BASES"               
## [13] "PCT_INTRONIC_BASES"           "PCT_INTERGENIC_BASES"        
## [15] "PCT_MRNA_BASES"               "MEDIAN_CV_COVERAGE"          
## [17] "MEDIAN_5PRIME_BIAS"           "MEDIAN_3PRIME_BIAS"          
## [19] "MEDIAN_5PRIME_TO_3PRIME_BIAS" "sample_id.x"                 
## [21] "Lane_ID"                      "LibraryName"                 
## [23] "avgLength"                    "spots"                       
## [25] "Biological_Condition"         "Coverage_Type"               
## [27] "Cluster1"                     "Cluster2"                    
## [29] "Size_Factor"
## 为了电脑的健康,我这里选择小数据集。 
sc_cds <- estimateSizeFactors(sc_cds)
sc_cds <- estimateDispersions(sc_cds)

本地加载RPKM数据

你也可以从本地RPKM值文件读入R语言后构造 CellDataSet 对象,下面是简单的例子:

#do not run
HSMM_expr_matrix <- read.table("fpkm_matrix.txt")
HSMM_sample_sheet <- read.delim("cell_sample_sheet.txt")
HSMM_gene_annotation <- read.delim("gene_annotations.txt")
# Once these tables are loaded, you can create the CellDataSet object like this:

pd <- new("AnnotatedDataFrame", data = HSMM_sample_sheet)
fd <- new("AnnotatedDataFrame", data = HSMM_gene_annotation)
HSMM <- newCellDataSet(as.matrix(HSMM_expr_matrix),
    phenoData = pd, featureData = fd)

值得注意的是,因为monocle和前面我们讲解的scater,还有seurat,它们基于的对象都不一样,所以monocle干脆提供了转换函数:

# 加入你把上面的 HSMM 赋值给 lung ,然后使用函数进行转换:
lung  <-  HSMM
# To convert to Seurat object
lung_seurat <- exportCDS(lung, 'Seurat')

# To convert to SCESet
lung_SCESet <- exportCDS(lung, 'Scater')

直接读取10X结果

因为10X实在是太流行了,所以monocle跟seurat一样,也提供了直接读取10X上游分析结果的接口函数,因为本文数据来源于smart-seq2,所以并不演示下面的代码:

cellranger_pipestance_path <- "/path/to/your/pipeline/output/directory"
gbm <- load_cellranger_matrix(cellranger_pipestance_path)

fd <- fData(gbm)

# The number 2 is picked arbitrarily in the line below.
# Where "2" is placed you should place the column number that corresponds to your
# featureData's gene short names.

colnames(fd)[2] <- "gene_short_name"

gbm_cds <- newCellDataSet(exprs(gbm),
                  phenoData = new("AnnotatedDataFrame", data = pData(gbm)),
                  featureData = new("AnnotatedDataFrame", data = fd),
                  lowerDetectionLimit = 0.5,
                  expressionFamily = negbinomial.size())

假设使用monocle3版本

你首先需要使用下面的代码,安装monocle3并不是一件容易的事情,然后函数基本上也全部修改了,当然,具体教程以官网为主:http://cole-trapnell-lab.github.io/monocle-release/monocle3/

Windows平台如果要安装Monocle3,需要配置Anaconda环境以及很多的环境变量,因此目前不推荐在Windows上安装。另外该版本目前很不稳定,所以不建议使用最新版本。

我这里仍然是演示monocle2,所以下面代码千万不要运行,仅仅作为演示而已。

devtools::install_github("cole-trapnell-lab/monocle-release", ref="monocle3_alpha")
library(monocle)
cds <- sc_cds
cds <- estimateSizeFactors(cds)
cds <- estimateDispersions(cds)
cds <- preprocessCDS(cds, num_dim = 20)
cds <- reduceDimension(cds, reduction_method = 'UMAP')
cds <- partitionCells(cds)
cds <- learnGraph(cds,  RGE_method = 'SimplePPT')
plot_cell_trajectory(cds,
                     color_by = "cell_type2") +
                     scale_color_manual(values = cell_type_color)

首先是质控

这里通常也是对基因 和 细胞进行质控,质控指标需要根据项目来进行具体探索,这里只是演示一下用法。

cds=sc_cds
cds
## CellDataSet (storageMode: environment)
## assayData: 26255 features, 130 samples 
##   element names: exprs 
## protocolData: none
## phenoData
##   sampleNames: SRR1275356 SRR1274090 ... SRR1275261 (130 total)
##   varLabels: NREADS NALIGNED ... Size_Factor (29 total)
##   varMetadata: labelDescription
## featureData
##   featureNames: A1BG A1BG-AS1 ... ZZZ3 (26255 total)
##   fvarLabels: gene_short_name
##   fvarMetadata: labelDescription
## experimentData: use 'experimentData(object)'
## Annotation:
## 起初是: 26255 features, 130 samples 
cds <- detectGenes(cds, min_expr = 0.1)
print(head(fData(cds)))
##          gene_short_name num_cells_expressed
## A1BG                A1BG                  10
## A1BG-AS1        A1BG-AS1                   2
## A1CF                A1CF                   1
## A2M                  A2M                  21
## A2M-AS1          A2M-AS1                   3
## A2ML1              A2ML1                   9
expressed_genes <- row.names(subset(fData(cds),
                                    num_cells_expressed >= 5))
length(expressed_genes)
## [1] 13385
cds <- cds[expressed_genes,]
cds
## CellDataSet (storageMode: environment)
## assayData: 13385 features, 130 samples 
##   element names: exprs 
## protocolData: none
## phenoData
##   sampleNames: SRR1275356 SRR1274090 ... SRR1275261 (130 total)
##   varLabels: NREADS NALIGNED ... num_genes_expressed (30 total)
##   varMetadata: labelDescription
## featureData
##   featureNames: A1BG A2M ... ZZZ3 (13385 total)
##   fvarLabels: gene_short_name num_cells_expressed
##   fvarMetadata: labelDescription
## experimentData: use 'experimentData(object)'
## Annotation:
# 过滤基因后是:assayData: 13385 features, 130 samples 
print(head(pData(cds)))
##              NREADS NALIGNED  RALIGN TOTAL_DUP    PRIMER INSERT_SZ
## SRR1275356 10554900  7555880 71.5862   58.4931 0.0217638       208
## SRR1274090   196162   182494 93.0323   14.5122 0.0366826       247
## SRR1275251  8524470  5858130 68.7213   65.0428 0.0351827       230
## SRR1275287  7229920  5891540 81.4884   49.7609 0.0208685       222
## SRR1275364  5403640  4482910 82.9609   66.5788 0.0298284       228
## SRR1275269 10729700  7806230 72.7536   50.4285 0.0204349       245
##            INSERT_SZ_STD COMPLEXITY    NDUPR PCT_RIBOSOMAL_BASES
## SRR1275356            63   0.868928 0.343113               2e-06
## SRR1274090           133   0.997655 0.935730               0e+00
## SRR1275251            89   0.789252 0.201082               0e+00
## SRR1275287            78   0.898100 0.538191               0e+00
## SRR1275364            76   0.890693 0.391660               0e+00
## SRR1275269            99   0.879414 0.431169               0e+00
##            PCT_CODING_BASES PCT_UTR_BASES PCT_INTRONIC_BASES
## SRR1275356         0.125806      0.180954           0.613229
## SRR1274090         0.309822      0.412917           0.205185
## SRR1275251         0.398461      0.473884           0.039886
## SRR1275287         0.196420      0.227592           0.498944
## SRR1275364         0.138617      0.210406           0.543941
## SRR1275269         0.333077      0.354635           0.248331
##            PCT_INTERGENIC_BASES PCT_MRNA_BASES MEDIAN_CV_COVERAGE
## SRR1275356             0.080008       0.306760           1.495770
## SRR1274090             0.072076       0.722739           1.007580
## SRR1275251             0.087770       0.872345           1.242990
## SRR1275287             0.077044       0.424013           0.775981
## SRR1275364             0.107035       0.349024           1.441370
## SRR1275269             0.063957       0.687712           0.617100
##            MEDIAN_5PRIME_BIAS MEDIAN_3PRIME_BIAS
## SRR1275356           0.000000           0.166122
## SRR1274090           0.181742           0.698991
## SRR1275251           0.000000           0.340046
## SRR1275287           0.010251           0.350915
## SRR1275364           0.000000           0.204074
## SRR1275269           0.057960           0.345502
##            MEDIAN_5PRIME_TO_3PRIME_BIAS sample_id.x           Lane_ID
## SRR1275356                     1.036250   SRX534610 D24VYACXX130502:4
## SRR1274090                     0.293510   SRX534823                 1
## SRR1275251                     0.201518   SRX534623 D24VYACXX130502:4
## SRR1275287                     0.292838   SRX534641 D24VYACXX130502:1
## SRR1275364                     0.619863   SRX534614 D24VYACXX130502:7
## SRR1275269                     0.284480   SRX534632 D24VYACXX130502:4
##            LibraryName avgLength   spots Biological_Condition
## SRR1275356      GW16_2       202 9818076                 GW16
## SRR1274090       NPC_9        60   95454                  NPC
## SRR1275251      GW16_8       202 7935952                 GW16
## SRR1275287    GW21+3_2       202 6531944               GW21+3
## SRR1275364     GW16_23       202 4919561                 GW16
## SRR1275269      GW21_8       202 9969377                 GW21
##            Coverage_Type Cluster1 Cluster2 Size_Factor num_genes_expressed
## SRR1275356          High     IIIb      III    4.942714                4031
## SRR1274090           Low       1a        I    0.115099                3843
## SRR1275251          High     <NA>      III   10.428531                2786
## SRR1275287          High       1c        I    4.497109                5982
## SRR1275364          High     IIIb      III    2.908997                3013
## SRR1275269          High     <NA>        I   11.391219                6304
tmp=pData(cds)
fivenum(tmp[,1])
## [1]    91616   232899   892209  8130850 14477100
fivenum(tmp[,30])
## [1] 1418.0 2961.0 3841.5 5381.0 8221.0
# 这里并不需要过滤细胞,如果想过滤,就自己摸索阈值,然后挑选细胞即可。
valid_cells <- row.names(pData(cds) )
cds <- cds[,valid_cells]
cds 
## CellDataSet (storageMode: environment)
## assayData: 13385 features, 130 samples 
##   element names: exprs 
## protocolData: none
## phenoData
##   sampleNames: SRR1275356 SRR1274090 ... SRR1275261 (130 total)
##   varLabels: NREADS NALIGNED ... num_genes_expressed (30 total)
##   varMetadata: labelDescription
## featureData
##   featureNames: A1BG A2M ... ZZZ3 (13385 total)
##   fvarLabels: gene_short_name num_cells_expressed
##   fvarMetadata: labelDescription
## experimentData: use 'experimentData(object)'
## Annotation:

聚类

单细胞转录组最重要的就是把细胞分群啦,这里可供选择的算法非常多, 这里仍然是选择最常用的tSNE吧:

disp_table <- dispersionTable(cds)
unsup_clustering_genes <- subset(disp_table, mean_expression >= 0.1)
cds <- setOrderingFilter(cds, unsup_clustering_genes$gene_id)
plot_ordering_genes(cds) 

plot_pc_variance_explained(cds, return_all = F) # norm_method='log'

cds <- reduceDimension(cds, max_components = 2, num_dim = 6,
                        reduction_method = 'tSNE', verbose = T)
cds <- clusterCells(cds, num_clusters = 4) 
## Distance cutoff calculated to 0.6206275
plot_cell_clusters(cds, 1, 2, color = "Biological_Condition")

table(pData(cds)$Biological_Condition)
## 
##   GW16   GW21 GW21+3    NPC 
##     52     16     32     30

可以看到,GW21 也是被打散在其它分组里面。

排除干扰因素后聚类

跟前面的质控步骤一样,所谓的干扰因素,也是看自己对数据集的认识情况来自己摸索的,比如我们这里

tmp=pData(cds)
fivenum(tmp[,1])
## [1]    91616   232899   892209  8130850 14477100
fivenum(tmp[,30])
## [1] 1418.0 2961.0 3841.5 5381.0 8221.0
colnames(tmp)
##  [1] "NREADS"                          "NALIGNED"                       
##  [3] "RALIGN"                          "TOTAL_DUP"                      
##  [5] "PRIMER"                          "INSERT_SZ"                      
##  [7] "INSERT_SZ_STD"                   "COMPLEXITY"                     
##  [9] "NDUPR"                           "PCT_RIBOSOMAL_BASES"            
## [11] "PCT_CODING_BASES"                "PCT_UTR_BASES"                  
## [13] "PCT_INTRONIC_BASES"              "PCT_INTERGENIC_BASES"           
## [15] "PCT_MRNA_BASES"                  "MEDIAN_CV_COVERAGE"             
## [17] "MEDIAN_5PRIME_BIAS"              "MEDIAN_3PRIME_BIAS"             
## [19] "MEDIAN_5PRIME_TO_3PRIME_BIAS"    "sample_id.x"                    
## [21] "Lane_ID"                         "LibraryName"                    
## [23] "avgLength"                       "spots"                          
## [25] "Biological_Condition"            "Coverage_Type"                  
## [27] "Cluster1"                        "Cluster2"                       
## [29] "Size_Factor"                     "num_genes_expressed"            
## [31] "Cluster"                         "peaks"                          
## [33] "halo"                            "delta"                          
## [35] "rho"                             "nearest_higher_density_neighbor"
# 放在 residualModelFormulaStr 里面的是需要去除的
cds <- reduceDimension(cds, max_components = 2, num_dim = 2,
                        reduction_method = 'tSNE',
                        residualModelFormulaStr = "~Biological_Condition + num_genes_expressed",
                        verbose = T)
cds <- clusterCells(cds, num_clusters = 2)
## Distance cutoff calculated to 0.6762457
plot_cell_clusters(cds, 1, 2, color = "Biological_Condition")

## 上面去除了Biological_Condition,所以接下来聚类它们就被打散了。

cds <- reduceDimension(cds, max_components = 2, num_dim = 2,
                        reduction_method = 'tSNE',
                        residualModelFormulaStr = "~NREADS + num_genes_expressed",
                        verbose = T)
cds <- clusterCells(cds, num_clusters = 2)
## Distance cutoff calculated to 0.5443418
plot_cell_clusters(cds, 1, 2, color = "Biological_Condition")

差异分析

这个是转录组数据的常规分析了,在单细胞转录组领域也是如此,monocle这个包提供 differentialGeneTest 函数来做差异分析,在我们的例子里面可以是已知的细胞分类,或者是自己推断的聚类结果。

这一步时间会比较久

Sys.time()
## [1] "2019-02-24 23:15:14 CST"
diff_test_res <- differentialGeneTest(cds,
                                      fullModelFormulaStr = "~Biological_Condition")
Sys.time()
## [1] "2019-02-24 23:34:29 CST"
# 可以看到运行耗时

# Select genes that are significant at an FDR < 10%
sig_genes <- subset(diff_test_res, qval < 0.1)
head(sig_genes[,c("gene_short_name", "pval", "qval")] )
##       gene_short_name         pval         qval
## A1BG             A1BG 6.759792e-04 2.362397e-03
## A2M               A2M 5.659195e-08 5.852474e-07
## AACS             AACS 3.329596e-03 9.677356e-03
## AADAT           AADAT 1.403810e-02 3.422585e-02
## AAGAB           AAGAB 1.717061e-07 1.540937e-06
## AAMP             AAMP 8.820175e-05 3.849301e-04
plot_genes_jitter(cds[head(sig_genes$gene_short_name),], 
                  grouping = "Biological_Condition", ncol= 2)

下面是不同的可视化参数的效果

plot_genes_jitter(cds[head(sig_genes$gene_short_name),],
                  grouping = "Biological_Condition",
                  color_by = "Biological_Condition",
                  nrow= 3,
                  ncol = NULL )

这个时候可以考虑去选用多个差异分析R包来进行不同的比较,见我在单细胞天地的推文

推断发育轨迹

前面介绍的monocle的功能都只能说是中规中矩,而这个推断发育轨迹才是monocle的拿手好戏,也是它荣升为3大R包的核心竞争力。

第一步: 挑选合适的基因. 有多个方法,例如提供已知的基因集,这里选取统计学显著的差异基因列表

ordering_genes <- row.names (subset(diff_test_res, qval < 0.01))
cds <- setOrderingFilter(cds, ordering_genes)
plot_ordering_genes(cds)

cds <- reduceDimension(cds, max_components = 2,
                            method = 'DDRTree')

第二步: 降维。降维的目的是为了更好的展示数据。函数里提供了很多种方法, 不同方法的最后展示的图都不太一样, 其中“DDRTree”是Monocle2使用的默认方法

cds <- reduceDimension(cds, max_components = 2,
                            method = 'DDRTree')

第三步: 对细胞进行排序

cds <- orderCells(cds)

最后两个可视化函数,对结果进行可视化

plot_cell_trajectory(cds, color_by = "Biological_Condition")  

可以很明显看到细胞的发育轨迹,正好对应 pluripotent stem cells 分化而成的 neural progenitor cells (“NPC”) ,还有 “GW16” and “GW21” ,“GW21+3” 这种孕期细胞。

plot_genes_in_pseudotime可以展现marker基因,本例子随便选取了6个差异表达基因。

plot_genes_in_pseudotime(cds[head(sig_genes$gene_short_name),], 
                         color_by = "Biological_Condition")

最开始挑选合适基因,除了我们演示的找统计学显著的差异表达基因这个方法外,还可以于已知的标记基因,主要是基于生物学背景知识。

如果是已知基因列表,就需要自己读取外包文件,导入R里面来分析。

显示运行环境

sessionInfo()
## R version 3.5.2 (2018-12-20)
## Platform: x86_64-apple-darwin15.6.0 (64-bit)
## Running under: macOS Mojave 10.14.2
## 
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
##  [1] splines   stats4    parallel  stats     graphics  grDevices utils    
##  [8] datasets  methods   base     
## 
## other attached packages:
##  [1] bindrcpp_0.2.2              dplyr_0.7.6                
##  [3] scRNAseq_1.8.0              SummarizedExperiment_1.12.0
##  [5] DelayedArray_0.8.0          BiocParallel_1.14.2        
##  [7] matrixStats_0.54.0          GenomicRanges_1.34.0       
##  [9] GenomeInfoDb_1.18.1         IRanges_2.16.0             
## [11] S4Vectors_0.20.1            monocle_2.10.1             
## [13] DDRTree_0.1.5               irlba_2.3.2                
## [15] VGAM_1.0-6                  ggplot2_3.0.0              
## [17] Biobase_2.40.0              BiocGenerics_0.28.0        
## [19] Matrix_1.2-15              
## 
## loaded via a namespace (and not attached):
##  [1] viridis_0.5.1          viridisLite_0.3.0      assertthat_0.2.0      
##  [4] BiocManager_1.30.3     GenomeInfoDbData_1.1.0 yaml_2.2.0            
##  [7] slam_0.1-44            ggrepel_0.8.0          pillar_1.3.0          
## [10] backports_1.1.2        lattice_0.20-38        glue_1.3.0            
## [13] limma_3.36.3           densityClust_0.3       digest_0.6.18         
## [16] XVector_0.22.0         RColorBrewer_1.1-2     colorspace_1.3-2      
## [19] fastICA_1.2-1          htmltools_0.3.6        plyr_1.8.4            
## [22] pkgconfig_2.0.2        pheatmap_1.0.10        HSMMSingleCell_1.2.0  
## [25] qlcMatrix_0.9.7        zlibbioc_1.26.0        purrr_0.2.5           
## [28] scales_1.0.0           RANN_2.6.1             Rtsne_0.15            
## [31] proxy_0.4-22           tibble_1.4.2           combinat_0.0-8        
## [34] docopt_0.6.1           withr_2.1.2            sparsesvd_0.1-4       
## [37] lazyeval_0.2.1         magrittr_1.5           crayon_1.3.4          
## [40] evaluate_0.11          FNN_1.1.2.2            tools_3.5.2           
## [43] stringr_1.3.1          munsell_0.5.0          cluster_2.0.7-1       
## [46] compiler_3.5.2         rlang_0.2.2            grid_3.5.2            
## [49] RCurl_1.95-4.11        igraph_1.2.2           labeling_0.3          
## [52] bitops_1.0-6           rmarkdown_1.10         gtable_0.2.0          
## [55] reshape2_1.4.3         R6_2.2.2               gridExtra_2.3         
## [58] knitr_1.20             bindr_0.1.1            rprojroot_1.3-2       
## [61] stringi_1.2.4          Rcpp_1.0.0             tidyselect_0.2.4