教程,当然是以官网为主,不过看英文笔记有挑战,简略带领大家一起学习咯:http://cole-trapnell-lab.github.io/monocle-release/docs/
值得注意的是这里展现的是monocle2版本的使用教程,因为monocle3仍然是不那么稳定。
需要自行下载安装一些必要的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 对象的三个数据集
exprs
:数值矩阵 行名是基因, 列名是细胞编号.phenoData
: 第一列是细胞编号,其他列是细胞的相关信息featureData
: 第一列是基因编号, 其他列是基因对应的信息并且这三个数据集要满足如下要求:
表达量矩阵必须:
phenoData
的行数featureData
的行数而且
phenoData
的行名需要和表达矩阵的列名匹配featureData
和表达矩阵的行名要匹配featureData
至少要有一列“gene_short_name”, 就是基因的symbol如下是几个例子
该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包。 这个包内置的是 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值文件读入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实在是太流行了,所以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并不是一件容易的事情,然后函数基本上也全部修改了,当然,具体教程以官网为主: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