The most recent update of this html document occurred: Wed Nov 14 19:52:04 2018

library(knitr)

library(ggplot2)
library(reshape)
library(DESeq2)
## Loading required package: S4Vectors
## Loading required package: stats4
## Loading required package: BiocGenerics
## Loading required package: parallel
## 
## Attaching package: 'BiocGenerics'
## The following objects are masked from 'package:parallel':
## 
##     clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,
##     clusterExport, clusterMap, parApply, parCapply, parLapply,
##     parLapplyLB, parRapply, parSapply, parSapplyLB
## The following objects are masked from 'package:stats':
## 
##     IQR, mad, sd, var, xtabs
## The following objects are masked from 'package:base':
## 
##     anyDuplicated, append, as.data.frame, basename, cbind,
##     colMeans, colnames, colSums, dirname, do.call, duplicated,
##     eval, evalq, Filter, Find, get, grep, grepl, intersect,
##     is.unsorted, lapply, lengths, Map, mapply, match, mget, order,
##     paste, pmax, pmax.int, pmin, pmin.int, Position, rank, rbind,
##     Reduce, rowMeans, rownames, rowSums, sapply, setdiff, sort,
##     table, tapply, union, unique, unsplit, which, which.max,
##     which.min
## 
## Attaching package: 'S4Vectors'
## The following objects are masked from 'package:reshape':
## 
##     expand, rename
## The following object is masked from 'package:base':
## 
##     expand.grid
## Loading required package: IRanges
## 
## Attaching package: 'IRanges'
## The following object is masked from 'package:grDevices':
## 
##     windows
## Loading required package: GenomicRanges
## Loading required package: GenomeInfoDb
## Loading required package: SummarizedExperiment
## Loading required package: Biobase
## Welcome to Bioconductor
## 
##     Vignettes contain introductory material; view with
##     'browseVignettes()'. To cite Bioconductor, see
##     'citation("Biobase")', and for packages 'citation("pkgname")'.
## Loading required package: DelayedArray
## Loading required package: matrixStats
## 
## Attaching package: 'matrixStats'
## The following objects are masked from 'package:Biobase':
## 
##     anyMissing, rowMedians
## Loading required package: BiocParallel
## 
## Attaching package: 'DelayedArray'
## The following objects are masked from 'package:matrixStats':
## 
##     colMaxs, colMins, colRanges, rowMaxs, rowMins, rowRanges
## The following objects are masked from 'package:base':
## 
##     aperm, apply
library(genefilter)
## 
## Attaching package: 'genefilter'
## The following objects are masked from 'package:matrixStats':
## 
##     rowSds, rowVars
library(CHBUtils)
library(gtools)
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:Biobase':
## 
##     combine
## The following object is masked from 'package:BiocGenerics':
## 
##     combine
library(devtools)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:gridExtra':
## 
##     combine
## The following object is masked from 'package:matrixStats':
## 
##     count
## The following object is masked from 'package:Biobase':
## 
##     combine
## The following objects are masked from 'package:GenomicRanges':
## 
##     intersect, setdiff, union
## The following object is masked from 'package:GenomeInfoDb':
## 
##     intersect
## The following objects are masked from 'package:IRanges':
## 
##     collapse, desc, intersect, setdiff, slice, union
## The following objects are masked from 'package:S4Vectors':
## 
##     first, intersect, rename, setdiff, setequal, union
## The following objects are masked from 'package:BiocGenerics':
## 
##     combine, intersect, setdiff, union
## The following object is masked from 'package:reshape':
## 
##     rename
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(isomiRs)
## Loading required package: DiscriMiner
library(pheatmap)

knitr::opts_chunk$set(tidy=TRUE, highlight=TRUE, dev="png", fig.width=6,fig.heigh=6,
               cache=FALSE, highlight=TRUE, autodep=TRUE, 
               warning=FALSE, error=FALSE,
               message=FALSE, prompt=TRUE, comment='', fig.cap='', bootstrap.show.code=FALSE)

root_path = "C:/Users/avial/Dropbox/Files/rstudio/mirna4/"
root_file = file.path(root_path, "srna_out_files")
dir.create(root_file, showWarnings = FALSE)

metadata_fn =  list.files(file.path(root_path), pattern = "summary.csv$",recursive = T, full.names = T)
metadata = read.csv(metadata_fn, row.names="sample_id")
condition = names(metadata)[1]
design = metadata
formula = ~ condition # modify this to get your own formula, it should be a column in your metadata
isde=TRUE # turn this true to make DE ananlysis

Exploratory analysis

In this section we will see descriptive figures about quality of the data, reads with adapter, reads mapped to miRNAs, reads mapped to other small RNAs.

size distribution

After adapter removal, we can plot the size distribution of the small RNAs.

> files = list.files(file.path(root_path), pattern = "trimming_stats", recursive = T)
> isadapter = length(files) > 0
> names(files) = sapply(files, function(x) {
+     gsub("-ready.trimming_stats", "", basename(x))
+ })
> 
> 
> tab = data.frame()
> for (sample in rownames(metadata)) {
+     d = read.table(file.path(root_path, files[sample]), sep = " ")
+     tab = rbind(tab, d %>% mutate(sample = sample, group = metadata[sample, 
+         condition]))
+ }
> 
> 
> reads_adapter = tab %>% group_by(sample, group) %>% summarise(total = sum(V2))
> ggplot(reads_adapter, aes(x = sample, y = total, fill = group)) + geom_bar(stat = "identity", 
+     position = "dodge") + ggtitle("total number of reads with adapter") + ylab("# reads") + 
+     theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))

> ggplot(tab, aes(x = V1, y = V2, group = sample)) + geom_bar(stat = "identity", 
+     position = "dodge") + facet_wrap(~group, ncol = 2) + ggtitle("size distribution") + 
+     ylab("# reads") + xlab("size") + theme(axis.text.x = element_text(angle = 90, 
+     vjust = 0.5, hjust = 1))

> files = list.files(file.path(root_path), pattern = "mirbase-ready", recursive = T, 
+     full.names = T)
> ismirbase = length(files) > 0
> mirdeep2_files = list.files(file.path(root_path), pattern = "novel-ready", recursive = T, 
+     full.names = T)
> ismirdeep2 = length(mirdeep2_files) > 0

miRNA

total miRNA expression annotated with mirbase

> names(files) = sapply(files, function(x) {
+     gsub("-mirbase-ready.counts", "", basename(x))
+ })
> 
> obj <- IsomirDataSeqFromFiles(files = files[rownames(design)], coldata = design, 
+     header = T, skip = 0)
> ggplot(data.frame(sample = colnames(counts(obj)), total = colSums(counts(obj)))) + 
+     geom_bar(aes(x = sample, y = total), stat = "identity") + theme(axis.text.x = element_text(angle = 90, 
+     vjust = 0.5, hjust = 1))

> mirna_step <- as.data.frame(colSums(counts(obj)))

Distribution of mirna expression

> ggplot(melt(counts(obj))) + geom_boxplot(aes(x = X2, y = value)) + scale_y_log10() + 
+     theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))

cumulative distribution of miRNAs

> cs <- as.data.frame(apply(counts(obj), 2, function(x) {
+     cumsum(sort(x, decreasing = T))
+ }))
> cs$pos <- 1:nrow(cs)
> 
> ggplot((melt(cs, id.vars = "pos"))) + geom_line(aes(x = pos, y = value, color = variable)) + 
+     scale_y_log10()

Clustering

> counts = counts(obj)
> dds = DESeqDataSetFromMatrix(counts[rowSums(counts > 0) > 10, ], colData = design, 
+     design = ~1)
> vst = rlog(dds)
> 
> # pheatmap(assay(vst), annotation_col = design, show_rownames = F,
> # clustering_distance_cols = 'correlation', clustering_method = 'ward.D')

MDS plot

> # mds(assay(vst), condition = design[,condition])

complexity

Number of miRNAs with > 3 counts.

> kable(as.data.frame(colSums(counts > 10)))
colSums(counts > 10)
12 325
15 289
22 228
9 320
7 429
19 390
5 374
14 389
20 305
18 389
24 253
2 372
23 300
17 378
1 321
8 279
11 403
3 240
16 349
6 319
21 341
4 233
10 354
13 327

Differential expression

DESeq2 is used for this analysis.

> library(DESeq2)
> # library(DEGreport)
> library(vsn)
> #' save file
> save_file <- function(dat, fn, basedir = ".") {
+     tab <- cbind(id = data.frame(id = row.names(dat)), as.data.frame(dat))
+     write.table(tab, file.path(basedir, fn), quote = F, sep = "\t", row.names = F)
+ }
> 
> filter_handle <- function(res) {
+     res_nona <- res[!is.na(res$padj), ]
+     keep <- res_nona$padj < 0.1
+     res_nona[keep, ]
+ }
> 
> handle_deseq2 = function(dds, summarydata, column, prefix, all_combs = NULL) {
+     if (is.null(all_combs)) 
+         all_combs = combn(levels(summarydata[, column]), 2, simplify = FALSE)
+     all_results = list()
+     contrast_strings = list()
+     rlog = rlog(dds)
+     for (comb in all_combs) {
+         contrast_string = paste(comb, collapse = "_vs_")
+         cat("\n\n## Comparison: ", contrast_string, "\n")
+         contrast = c(column, comb)
+         res = results(dds, contrast = contrast)
+         res = res[order(res$padj), ]
+         all_results = c(all_results, res)
+         contrast_strings = c(contrast_strings, contrast_string)
+         print_out(dds, rlog, res, paste0(prefix, "_", contrast_string))
+     }
+     names(all_results) = contrast_strings
+     return(all_results)
+ }
> 
> do_de = function(raw, summarydata, condition, minc = 3) {
+     dss = DESeqDataSetFromMatrix(countData = raw[rowMeans(raw) > minc, ], colData = summarydata, 
+         design = ~condition)
+     dss = DESeq(dss)
+     dss
+ }
> 
> do_norm = function(dss, path, prefix) {
+     rlog_ma = assay(rlog(dss))
+     count_ma = counts(dss, normalized = TRUE)
+     raw = counts(dss, normalized = FALSE)
+     
+     fn_log = paste0(prefix, "_log_matrix.txt")
+     save_file(rlog_ma, fn_log, path)
+     
+     fn_count = paste0(prefix, "_norm_matrix.txt")
+     save_file(count_ma, fn_count, path)
+     
+     fn_raw = paste0(prefix, "_raw_matrix.txt")
+     save_file(raw, fn_raw, path)
+ }
> 
> print_out = function(dss, rlog = NULL, res = NULL, prefix = "standard_") {
+     plotDispEsts(dss)
+     if (is.null(res)) 
+         res = results(dss)
+     if (is.null(rlog)) 
+         rlog = rlog(dss)
+     
+     rlogmat = assay(rlog)
+     design = as.data.frame(colData(dss)[, names(colData(dss)) != "sizeFactor", 
+         drop = FALSE])
+     
+     out_df = as.data.frame(res)
+     out_df = out_df[!is.na(out_df$padj), ]
+     out_df = out_df[order(out_df$padj), ]
+     do_norm(dss, root_file, prefix)
+     
+     cat("\n", paste(capture.output(summary(res))[1:8], collapse = "<br>"), "\n")
+     cat("\n\n### MA plot plot\n\n")
+     DESeq2::plotMA(res)
+     
+     cat("\n\n### Top DE miRNAs\n\n")
+     print(kable(head(out_df, 20)))
+     fn = paste(prefix, ".tsv", sep = "")
+     save_file(out_df, fn, root_file)
+     
+     sign = row.names(out_df)[out_df$padj < 0.05 & !is.na(out_df$padj) & abs(out_df$log2FoldChange) > 
+         0.5]
+     
+     cat("\n\n### Heatmap most significand(", length(sign), "), padj<0.05 and log2FC > 0.5\n")
+     if (length(sign) < 5000) {
+         cat("Too few genes to plot.")
+     } else {
+         pheatmap(rlogmat[sign, ], show_rownames = F, annotation_col = design, 
+             clustering_distance_cols = "correlation", clustering_method = "ward.D2")
+         mds(rlogmat[sign, ], condition = design[, condition])
+     }
+     
+ }

Analysis for miRNA

> counts = counts(obj)
> dss = DESeqDataSetFromMatrix(countData = counts[rowSums(counts > 0) > 3, ], 
+     colData = design, design = ~batch)
> dss = DESeq(dss)
> all_results = handle_deseq2(dss, design, condition, "mirna_")

Comparison: M_vs_S


out of 716 with nonzero total read count
adjusted p-value < 0.1
LFC > 0 (up) : 0, 0%
LFC < 0 (down) : 2, 0.28%
outliers [1] : 0, 0%
low counts [2] : 0, 0%
(mean count < 0)

MA plot plot

Top DE miRNAs

baseMean log2FoldChange lfcSE stat pvalue padj
hsa-miR-204-5p 2556.674011 -2.4700213 0.5051725 -4.889461 0.0000010 0.0007240
hsa-miR-146b-5p 256.797766 -1.2471013 0.3291886 -3.788410 0.0001516 0.0542779
hsa-miR-10b-5p 14124.758845 -0.6594372 0.1953322 -3.375979 0.0007355 0.1755479
hsa-miR-1299 4.964037 -4.0077600 1.2176969 -3.291262 0.0009974 0.1785325
hsa-miR-148b-3p 185.904244 -0.8035114 0.2579942 -3.114455 0.0018429 0.2638963
hsa-miR-214-5p 16.638892 -1.9937658 0.6590401 -3.025257 0.0024842 0.2964500
hsa-miR-27a-3p 295.489671 -0.5412247 0.1825946 -2.964079 0.0030359 0.3105299
hsa-miR-1247-3p 17.964440 -1.7593001 0.6116830 -2.876163 0.0040254 0.3602749
hsa-miR-3188 2.935625 3.5560727 1.2945309 2.746997 0.0060144 0.4784762
hsa-miR-423-3p 8301.761462 0.4814196 0.1795617 2.681081 0.0073385 0.5254352
hsa-miR-146a-5p 39.899268 -1.2775243 0.4900777 -2.606779 0.0091398 0.5949198
hsa-miR-6740-5p 2.028243 4.6695917 1.8529292 2.520113 0.0117317 0.6461462
hsa-miR-7706 170.493551 0.6993445 0.2756561 2.537018 0.0111801 0.6461462
hsa-miR-10a-5p 16550.117337 -0.5655231 0.2268212 -2.493255 0.0126578 0.6473553
hsa-miR-130a-3p 475.075568 -0.6330034 0.2593666 -2.440574 0.0146640 0.6562120
hsa-miR-328-3p 1468.861968 0.4406965 0.1792559 2.458477 0.0139528 0.6562120
hsa-miR-203a-3p 3.134790 -3.6596669 1.5843808 -2.309840 0.0208970 0.7124877
hsa-miR-2116-3p 30.174554 1.0983334 0.4707235 2.333288 0.0196330 0.7124877
hsa-miR-383-5p 3.196556 -2.9660165 1.2763130 -2.323894 0.0201312 0.7124877
hsa-miR-493-3p 2.479545 -3.3498836 1.4244168 -2.351758 0.0186849 0.7124877

Heatmap most significand( 1 ), padj<0.05 and log2FC > 0.5

Too few genes to plot.

> DESeq2::plotCounts(dds, put_gene_name_here)

Analysis for novel miRNA

> counts = counts(obj_mirdeep)
> dss_mirdeep2 = DESeqDataSetFromMatrix(countData = counts[rowSums(counts > 0) > 
+     3, ], colData = design, design = ~batch)
> 
> dss = DESeq(dss)
> all_results = handle_deseq2(dss_mirdeep2, design, condition, "mirdeep2_")

Analysis for isomiRs

> counts_iso = counts(isoCounts(obj, ref = T, iso5 = T, iso3 = T, add = T, subs = T))
> dss_iso = DESeqDataSetFromMatrix(countData = counts_iso[rowSums(counts_iso > 
+     0) > 3, ], colData = design, design = ~batch)
> 
> dss_iso = DESeq(dss_iso)
> all_results = handle_deseq2(dss_iso, design, condition, "isomirs_")

Comparison: M_vs_S


out of 4998 with nonzero total read count
adjusted p-value < 0.1
LFC > 0 (up) : 0, 0%
LFC < 0 (down) : 1, 0.02%
outliers [1] : 0, 0%
low counts [2] : 0, 0%
(mean count < 0)

MA plot plot

Top DE miRNAs

baseMean log2FoldChange lfcSE stat pvalue padj
hsa-miR-204-5p;iso_3p:G 1.565190e+03 -2.2876688 0.4880241 -4.6876145 0.0000028 0.0138149
hsa-miR-10b-5p;ref 2.256738e+03 -0.7943589 0.2144877 -3.7035170 0.0002126 0.4573577
hsa-miR-146b-5p;iso_3p:G 1.167242e+02 -1.3084116 0.3596292 -3.6382242 0.0002745 0.4573577
hsa-miR-204-5p;ref 9.495080e+02 -2.5837978 0.7799821 -3.3126373 0.0009242 0.9238379
hsa-miR-320a;iso_add:TT;iso_3p:A 2.325604e+01 1.4628613 0.4404636 3.3211854 0.0008964 0.9238379
hsa-miR-10b-5p;iso_5p:t;iso_3p:T 4.781720e+02 -0.7934538 0.2556171 -3.1040711 0.0019088 0.9540056
hsa-miR-204-5p;iso_add:T;iso_3p:G 8.000198e+01 -1.8828602 0.5936982 -3.1714095 0.0015170 0.9540056
hsa-miR-3615;iso_3p:GC 1.012270e+02 0.8915047 0.2817653 3.1639974 0.0015562 0.9540056
hsa-miR-7706;iso_3p:a 5.250073e+01 1.1189111 0.3448317 3.2448039 0.0011753 0.9540056
hsa-miR-92a-3p;iso_add:TAT;iso_3p:T 4.918831e+00 -2.7154834 0.8730197 -3.1104491 0.0018680 0.9540056
hsa-let-7a-3p;iso_5p:A 6.510953e-01 -2.0030411 2.7459332 -0.7294573 0.4657220 0.9996740
hsa-let-7a-5p;iso_3p:gtt 2.130845e+02 -0.3604146 0.4002953 -0.9003718 0.3679224 0.9996740
hsa-let-7a-5p;iso_3p:t 2.211226e+04 -0.2256582 0.3031139 -0.7444667 0.4565942 0.9996740
hsa-let-7a-5p;iso_3p:T 4.012243e+03 -0.2839101 0.2613154 -1.0864652 0.2772732 0.9996740
hsa-let-7a-5p;iso_3p:TG 8.248881e+00 -0.4005652 0.8872510 -0.4514677 0.6516525 0.9996740
hsa-let-7a-5p;iso_3p:tt 1.711749e+03 -0.1296428 0.3195418 -0.4057147 0.6849522 0.9996740
hsa-let-7a-5p;iso_5p:A 3.476099e+00 2.5645912 1.4804542 1.7323002 0.0832201 0.9996740
hsa-let-7a-5p;iso_5p:G 1.017868e+02 -0.2070539 0.4230899 -0.4893851 0.6245691 0.9996740
hsa-let-7a-5p;iso_5p:G;iso_3p:gtt 6.199662e-01 0.2470724 2.8221967 0.0875461 0.9302374 0.9996740
hsa-let-7a-5p;iso_5p:G;iso_3p:t 1.155165e+02 0.1641435 0.3476063 0.4722109 0.6367763 0.9996740

Heatmap most significand( 1 ), padj<0.05 and log2FC > 0.5

Too few genes to plot.

> DESeq2::plotCounts(dds, put_gene_name_here)

Files

Files generated contains raw count, normalized counts, log2 normalized counts and DESeq2 results.

R Session Info

(useful if replicating these results)

> sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17134)

Matrix products: default

locale:
[1] LC_COLLATE=Russian_Russia.1251  LC_CTYPE=Russian_Russia.1251   
[3] LC_MONETARY=Russian_Russia.1251 LC_NUMERIC=C                   
[5] LC_TIME=Russian_Russia.1251    

attached base packages:
[1] parallel  stats4    stats     graphics  grDevices utils     datasets 
[8] methods   base     

other attached packages:
 [1] vsn_3.50.0                  bindrcpp_0.2.2             
 [3] pheatmap_1.0.10             isomiRs_1.10.0             
 [5] DiscriMiner_0.1-29          dplyr_0.7.8                
 [7] usethis_1.4.0               devtools_2.0.1             
 [9] gridExtra_2.3               gtools_3.8.1               
[11] CHBUtils_0.1                genefilter_1.64.0          
[13] DESeq2_1.22.1               SummarizedExperiment_1.12.0
[15] DelayedArray_0.8.0          BiocParallel_1.16.0        
[17] matrixStats_0.54.0          Biobase_2.42.0             
[19] GenomicRanges_1.34.0        GenomeInfoDb_1.18.1        
[21] IRanges_2.16.0              S4Vectors_0.20.1           
[23] BiocGenerics_0.28.0         reshape_0.8.8              
[25] ggplot2_3.1.0               knitr_1.20                 

loaded via a namespace (and not attached):
  [1] backports_1.1.2             circlize_0.4.4             
  [3] Hmisc_4.1-1                 plyr_1.8.4                 
  [5] ConsensusClusterPlus_1.46.0 lazyeval_0.2.1             
  [7] splines_3.5.1               digest_0.6.18              
  [9] htmltools_0.3.6             gdata_2.18.0               
 [11] magrittr_1.5                checkmate_1.8.5            
 [13] memoise_1.1.0               cluster_2.0.7-1            
 [15] limma_3.38.2                remotes_2.0.2              
 [17] ComplexHeatmap_1.20.0       readr_1.1.1                
 [19] annotate_1.60.0             Nozzle.R1_1.1-1            
 [21] prettyunits_1.0.2           colorspace_1.3-2           
 [23] blob_1.1.1                  ggrepel_0.8.0              
 [25] callr_3.0.0                 crayon_1.3.4               
 [27] RCurl_1.95-4.11             DEGreport_1.18.0           
 [29] bindr_0.1.1                 survival_2.43-1            
 [31] glue_1.3.0                  gtable_0.2.0               
 [33] zlibbioc_1.28.0             XVector_0.22.0             
 [35] GetoptLong_0.1.7            pkgbuild_1.0.2             
 [37] shape_1.4.4                 scales_1.0.0               
 [39] DBI_1.0.0                   GGally_1.4.0               
 [41] edgeR_3.24.0                Rcpp_1.0.0                 
 [43] xtable_1.8-3                lasso2_1.2-19              
 [45] htmlTable_1.12              foreign_0.8-71             
 [47] bit_1.1-14                  preprocessCore_1.44.0      
 [49] Formula_1.2-3               htmlwidgets_1.3            
 [51] gplots_3.0.1                RColorBrewer_1.1-2         
 [53] acepack_1.4.1               pkgconfig_2.0.2            
 [55] XML_3.98-1.16               nnet_7.3-12                
 [57] locfit_1.5-9.1              tidyselect_0.2.5           
 [59] labeling_0.3                rlang_0.3.0.1              
 [61] AnnotationDbi_1.44.0        munsell_0.5.0              
 [63] tools_3.5.1                 cli_1.0.1                  
 [65] RSQLite_2.1.1               broom_0.5.0                
 [67] evaluate_0.12               stringr_1.3.1              
 [69] ggdendro_0.1-20             yaml_2.2.0                 
 [71] processx_3.2.0              bit64_0.9-7                
 [73] fs_1.2.6                    caTools_1.17.1.1           
 [75] purrr_0.2.5                 assertive.sets_0.0-3       
 [77] nlme_3.1-137                formatR_1.5                
 [79] compiler_3.5.1              rstudioapi_0.8             
 [81] affyio_1.52.0               tibble_1.4.2               
 [83] geneplotter_1.60.0          stringi_1.2.4              
 [85] highr_0.7                   ps_1.2.1                   
 [87] desc_1.2.0                  lattice_0.20-38            
 [89] assertive.base_0.0-7        Matrix_1.2-15              
 [91] psych_1.8.10                pillar_1.3.0               
 [93] BiocManager_1.30.4          GlobalOptions_0.1.0        
 [95] data.table_1.11.8           cowplot_0.9.3              
 [97] bitops_1.0-6                R6_2.3.0                   
 [99] latticeExtra_0.6-28         affy_1.60.0                
[101] KernSmooth_2.23-15          sessioninfo_1.1.1          
[103] MASS_7.3-51.1               assertthat_0.2.0           
[105] pkgload_1.0.2               rprojroot_1.3-2            
[107] rjson_0.2.20                withr_2.1.2                
[109] mnormt_1.5-5                GenomeInfoDbData_1.2.0     
[111] hms_0.4.2                   grid_3.5.1                 
[113] rpart_4.1-13                tidyr_0.8.2                
[115] rmarkdown_1.10              logging_0.7-103            
[117] base64enc_0.1-3