vignettes/vignette.Rmd
vignette.Rmd
# To install scGPS from github (Depending on the configuration of the local
# computer or HPC, possible custom C++ compilation may be required - see
# installation trouble-shootings below)
devtools::install_github("IMB-Computational-Genomics-Lab/scGPS")
# for C++ compilation trouble-shooting, manual download and installation can be
# done from github
git clone https://github.com/IMB-Computational-Genomics-Lab/scGPS
# then check in scGPS/src if any of the precompiled (e.g. those with *.so and
# *.o) files exist and delete them before recompiling
# then with the scGPS as the R working directory, manually install and load
# using devtools functionality
# Install the package
devtools::install()
#load the package to the workspace
library(scGPS)
The purpose of this workflow is to solve the following task:
# load mixed population 1 (loaded from day_2_cardio_cell_sample dataset,
# named it as day2)
library(scGPS)
day2 <- day_2_cardio_cell_sample
mixedpop1 <- new_scGPS_object(ExpressionMatrix = day2$dat2_counts,
GeneMetadata = day2$dat2geneInfo, CellMetadata = day2$dat2_clusters)
# load mixed population 2 (loaded from day_5_cardio_cell_sample dataset,
# named it as day5)
day5 <- day_5_cardio_cell_sample
mixedpop2 <- new_scGPS_object(ExpressionMatrix = day5$dat5_counts,
GeneMetadata = day5$dat5geneInfo, CellMetadata = day5$dat5_clusters)
# select a subpopulation
c_selectID <- 1
# load gene list (this can be any lists of user selected genes)
genes <- training_gene_sample
genes <- genes$Merged_unique
# load cluster information
cluster_mixedpop1 <- colData(mixedpop1)[,1]
cluster_mixedpop2 <- colData(mixedpop2)[,1]
#run training (running nboots = 3 here, but recommend to use nboots = 50-100)
LSOLDA_dat <- bootstrap_prediction(nboots = 3, mixedpop1 = mixedpop1,
mixedpop2 = mixedpop2, genes = genes, c_selectID = c_selectID,
listData = list(), cluster_mixedpop1 = cluster_mixedpop1,
cluster_mixedpop2 = cluster_mixedpop2, trainset_ratio = 0.7)
names(LSOLDA_dat)
#> [1] "Accuracy" "ElasticNetGenes" "Deviance"
#> [4] "ElasticNetFit" "LDAFit" "predictor_S1"
#> [7] "ElasticNetPredict" "LDAPredict" "cell_results"
# summary results LDA
sum_pred_lda <- summary_prediction_lda(LSOLDA_dat = LSOLDA_dat, nPredSubpop = 4)
# summary results Lasso to show the percent of cells
# classified as cells belonging
sum_pred_lasso <- summary_prediction_lasso(LSOLDA_dat = LSOLDA_dat,
nPredSubpop = 4)
# plot summary results
plot_sum <-function(sum_dat){
sum_dat_tf <- t(sum_dat)
sum_dat_tf <- na.omit(sum_dat_tf)
sum_dat_tf <- apply(sum_dat[, -ncol(sum_dat)],1,
function(x){as.numeric(as.vector(x))})
sum_dat$names <- gsub("ElasticNet for subpop","sp", sum_dat$names )
sum_dat$names <- gsub("in target mixedpop","in p", sum_dat$names)
sum_dat$names <- gsub("LDA for subpop","sp", sum_dat$names )
sum_dat$names <- gsub("in target mixedpop","in p", sum_dat$names)
colnames(sum_dat_tf) <- sum_dat$names
boxplot(sum_dat_tf, las=2)
}
plot_sum(sum_pred_lasso)
plot_sum(sum_pred_lda)
# summary accuracy to check the model accuracy in the leave-out test set
summary_accuracy(object = LSOLDA_dat)
#> [1] 59.43396 68.37209 61.21495
# summary maximum deviance explained by the model
summary_deviance(object = LSOLDA_dat)
#> $allDeviance
#> [1] "12.64" "5.29" "12.2"
#>
#> $DeviMax
#> dat_DE$Dfd Deviance DEgenes
#> 1 0 5.29 genes_cluster1
#> 2 1 5.29 genes_cluster1
#> 3 2 5.29 genes_cluster1
#> 4 3 5.29 genes_cluster1
#> 5 4 5.29 genes_cluster1
#> 6 remaining DEgenes remaining DEgenes remaining DEgenes
#>
#> $LassoGenesMax
#> NULL
The purpose of this workflow is to solve the following task:
(skip this step if clusters are known)
# find clustering information in an expresion data using CORE
day5 <- day_5_cardio_cell_sample
cellnames <- colnames(day5$dat5_counts)
cluster <-day5$dat5_clusters
cellnames <-data.frame("Cluster"=cluster, "cellBarcodes" = cellnames)
mixedpop2 <-new_scGPS_object(ExpressionMatrix = day5$dat5_counts,
GeneMetadata = day5$dat5geneInfo, CellMetadata = cellnames)
CORE_cluster <- CORE_clustering(mixedpop2, remove_outlier = c(0), PCA=FALSE)
# to update the clustering information, users can ...
key_height <- CORE_cluster$optimalClust$KeyStats$Height
optimal_res <- CORE_cluster$optimalClust$OptimalRes
optimal_index = which(key_height == optimal_res)
clustering_after_outlier_removal <- unname(unlist(
CORE_cluster$Cluster[[optimal_index]]))
corresponding_cells_after_outlier_removal <- CORE_cluster$cellsForClustering
original_cells_before_removal <- colData(mixedpop2)[,2]
corresponding_index <- match(corresponding_cells_after_outlier_removal,
original_cells_before_removal )
# check the matching
identical(as.character(original_cells_before_removal[corresponding_index]),
corresponding_cells_after_outlier_removal)
#> [1] TRUE
# create new object with the new clustering after removing outliers
mixedpop2_post_clustering <- mixedpop2[,corresponding_index]
colData(mixedpop2_post_clustering)[,1] <- clustering_after_outlier_removal
(skip this step if clusters are known)
(SCORE aims to get stable subpopulation results by introducing bagging aggregation and bootstrapping to the CORE algorithm)
# find clustering information in an expresion data using SCORE
day5 <- day_5_cardio_cell_sample
cellnames <- colnames(day5$dat5_counts)
cluster <-day5$dat5_clusters
cellnames <-data.frame("Cluster"=cluster, "cellBarcodes" = cellnames)
mixedpop2 <-new_scGPS_object(ExpressionMatrix = day5$dat5_counts,
GeneMetadata = day5$dat5geneInfo, CellMetadata = cellnames )
SCORE_test <- CORE_bagging(mixedpop2, remove_outlier = c(0), PCA=FALSE,
bagging_run = 20, subsample_proportion = .8)
dev.off()
#> null device
#> 1
##3.2.1 plot CORE clustering
p1 <- plot_CORE(CORE_cluster$tree, CORE_cluster$Cluster,
color_branch = c("#208eb7", "#6ce9d3", "#1c5e39", "#8fca40", "#154975",
"#b1c8eb"))
p1
#> $mar
#> [1] 1 5 0 1
#extract optimal index identified by CORE
key_height <- CORE_cluster$optimalClust$KeyStats$Height
optimal_res <- CORE_cluster$optimalClust$OptimalRes
optimal_index = which(key_height == optimal_res)
#plot one optimal clustering bar
plot_optimal_CORE(original_tree= CORE_cluster$tree,
optimal_cluster = unlist(CORE_cluster$Cluster[optimal_index]),
shift = -2000)
#> Ordering and assigning labels...
#> 2
#> 162335NA
#> 3
#> 162335423
#> Plotting the colored dendrogram now....
#> Plotting the bar underneath now....
##3.2.2 plot SCORE clustering
#plot all clustering bars
plot_CORE(SCORE_test$tree, list_clusters = SCORE_test$Cluster)
#plot one stable optimal clustering bar
plot_optimal_CORE(original_tree= SCORE_test$tree,
optimal_cluster = unlist(SCORE_test$Cluster[
SCORE_test$optimal_index]),
shift = -100)
#> Ordering and assigning labels...
#> 2
#> 162335NA
#> 3
#> 162335423
#> Plotting the colored dendrogram now....
#> Plotting the bar underneath now....
t <- tSNE(expression.mat=assay(mixedpop2))
#> Preparing PCA inputs using the top 1500 genes ...
#> Computing PCA values...
#> Running tSNE ...
p2 <-plot_reduced(t, color_fac = factor(colData(mixedpop2)[,1]),
palletes =1:length(unique(colData(mixedpop2)[,1])))
#> Warning: Use of `reduced_dat_toPlot$Dim1` is discouraged. Use `Dim1` instead.
#> Warning: Use of `reduced_dat_toPlot$Dim2` is discouraged. Use `Dim2` instead.
p2
#load gene list (this can be any lists of user-selected genes)
genes <-training_gene_sample
genes <-genes$Merged_unique
#the gene list can also be objectively identified by differential expression
#analysis cluster information is requied for find_markers. Here, we use
#CORE results.
#colData(mixedpop2)[,1] <- unlist(SCORE_test$Cluster[SCORE_test$optimal_index])
suppressMessages(library(locfit))
DEgenes <- find_markers(expression_matrix=assay(mixedpop2),
cluster = colData(mixedpop2)[,1],
selected_cluster=unique(colData(mixedpop2)[,1]))
#the output contains dataframes for each cluster.
#the data frame contains all genes, sorted by p-values
names(DEgenes)
#> [1] "baseMean" "log2FoldChange" "lfcSE" "stat"
#> [5] "pvalue" "padj" "id"
#you can annotate the identified clusters
DEgeneList_1vsOthers <- DEgenes$DE_Subpop1vsRemaining$id
#users need to check the format of the gene input to make sure they are
#consistent to the gene names in the expression matrix
#the following command saves the file "PathwayEnrichment.xlsx" to the
#working dir
#use 500 top DE genes
suppressMessages(library(DOSE))
suppressMessages(library(ReactomePA))
suppressMessages(library(clusterProfiler))
genes500 <- as.factor(DEgeneList_1vsOthers[seq_len(500)])
enrichment_test <- annotate_clusters(genes, pvalueCutoff=0.05, gene_symbol=TRUE)
#the enrichment outputs can be displayed by running
clusterProfiler::dotplot(enrichment_test, showCategory=10, font.size = 6)
The purpose of this workflow is to solve the following task:
#select a subpopulation, and input gene list
c_selectID <- 1
#note make sure the format for genes input here is the same to the format
#for genes in the mixedpop1 and mixedpop2
genes = DEgenes$id[1:500]
#run the test bootstrap with nboots = 2 runs
cluster_mixedpop1 <- colData(mixedpop1)[,1]
cluster_mixedpop2 <- colData(mixedpop2)[,1]
LSOLDA_dat <- bootstrap_prediction(nboots = 2, mixedpop1 = mixedpop1,
mixedpop2 = mixedpop2, genes = genes,
c_selectID = c_selectID,
listData = list(),
cluster_mixedpop1 = cluster_mixedpop1,
cluster_mixedpop2 = cluster_mixedpop2)
#get the number of rows for the summary matrix
row_cluster <-length(unique(colData(mixedpop2)[,1]))
#summary results LDA to to show the percent of cells classified as cells
#belonging by LDA classifier
summary_prediction_lda(LSOLDA_dat=LSOLDA_dat, nPredSubpop = row_cluster )
#> V1 V2 names
#> 1 78.0748663101604 91.9786096256685 LDA for subpop 1 in target mixedpop2
#> 2 78.5714285714286 31.4285714285714 LDA for subpop 2 in target mixedpop2
#> 3 67.6691729323308 71.4285714285714 LDA for subpop 3 in target mixedpop2
#> 4 80 72.5 LDA for subpop 4 in target mixedpop2
#summary results Lasso to show the percent of cells classified as cells
#belonging by Lasso classifier
summary_prediction_lasso(LSOLDA_dat=LSOLDA_dat, nPredSubpop = row_cluster)
#> V1 V2 names
#> 1 17.1122994652406 56.6844919786096 ElasticNet for subpop1 in target mixedpop2
#> 2 99.2857142857143 100 ElasticNet for subpop2 in target mixedpop2
#> 3 94.7368421052632 87.9699248120301 ElasticNet for subpop3 in target mixedpop2
#> 4 97.5 95 ElasticNet for subpop4 in target mixedpop2
# summary maximum deviance explained by the model during the model training
summary_deviance(object = LSOLDA_dat)
#> $allDeviance
#> [1] "46.95" "53.35"
#>
#> $DeviMax
#> dat_DE$Dfd Deviance DEgenes
#> 1 0 53.35 genes_cluster1
#> 2 1 53.35 genes_cluster1
#> 3 4 53.35 genes_cluster1
#> 4 6 53.35 genes_cluster1
#> 5 7 53.35 genes_cluster1
#> 6 8 53.35 genes_cluster1
#> 7 10 53.35 genes_cluster1
#> 8 12 53.35 genes_cluster1
#> 9 14 53.35 genes_cluster1
#> 10 17 53.35 genes_cluster1
#> 11 20 53.35 genes_cluster1
#> 12 22 53.35 genes_cluster1
#> 13 23 53.35 genes_cluster1
#> 14 27 53.35 genes_cluster1
#> 15 remaining DEgenes remaining DEgenes remaining DEgenes
#>
#> $LassoGenesMax
#> NULL
# summary accuracy to check the model accuracy in the leave-out test set
summary_accuracy(object = LSOLDA_dat)
#> [1] 69.19643 62.05357
Here we look at one example use case to find relationship between clusters within one sample or between two sample
#run prediction for 3 clusters
cluster_mixedpop1 <- colData(mixedpop1)[,1]
cluster_mixedpop2 <- colData(mixedpop2)[,1]
#cluster_mixedpop2 <- as.numeric(as.vector(colData(mixedpop2)[,1]))
c_selectID <- 1
#top 200 gene markers distinguishing cluster 1
genes = DEgenes$id[1:200]
LSOLDA_dat1 <- bootstrap_prediction(nboots = 2, mixedpop1 = mixedpop2,
mixedpop2 = mixedpop2, genes=genes, c_selectID,
listData =list(),
cluster_mixedpop1 = cluster_mixedpop2,
cluster_mixedpop2 = cluster_mixedpop2)
c_selectID <- 2
genes = DEgenes$id[1:200]
LSOLDA_dat2 <- bootstrap_prediction(nboots = 2,mixedpop1 = mixedpop2,
mixedpop2 = mixedpop2, genes=genes, c_selectID,
listData =list(),
cluster_mixedpop1 = cluster_mixedpop2,
cluster_mixedpop2 = cluster_mixedpop2)
c_selectID <- 3
genes = DEgenes$id[1:200]
LSOLDA_dat3 <- bootstrap_prediction(nboots = 2,mixedpop1 = mixedpop2,
mixedpop2 = mixedpop2, genes=genes, c_selectID,
listData =list(),
cluster_mixedpop1 = cluster_mixedpop2,
cluster_mixedpop2 = cluster_mixedpop2)
c_selectID <- 4
genes = DEgenes$id[1:200]
LSOLDA_dat4 <- bootstrap_prediction(nboots = 2,mixedpop1 = mixedpop2,
mixedpop2 = mixedpop2, genes=genes, c_selectID,
listData =list(),
cluster_mixedpop1 = cluster_mixedpop2,
cluster_mixedpop2 = cluster_mixedpop2)
#prepare table input for sankey plot
LASSO_C1S2 <- reformat_LASSO(c_selectID=1, mp_selectID = 2,
LSOLDA_dat=LSOLDA_dat1,
nPredSubpop = length(unique(colData(mixedpop2)
[,1])),
Nodes_group ="#7570b3")
LASSO_C2S2 <- reformat_LASSO(c_selectID=2, mp_selectID =2,
LSOLDA_dat=LSOLDA_dat2,
nPredSubpop = length(unique(colData(mixedpop2)
[,1])),
Nodes_group ="#1b9e77")
LASSO_C3S2 <- reformat_LASSO(c_selectID=3, mp_selectID =2,
LSOLDA_dat=LSOLDA_dat3,
nPredSubpop = length(unique(colData(mixedpop2)
[,1])),
Nodes_group ="#e7298a")
LASSO_C4S2 <- reformat_LASSO(c_selectID=4, mp_selectID =2,
LSOLDA_dat=LSOLDA_dat4,
nPredSubpop = length(unique(colData(mixedpop2)
[,1])),
Nodes_group ="#00FFFF")
combined <- rbind(LASSO_C1S2,LASSO_C2S2,LASSO_C3S2, LASSO_C4S2 )
combined <- combined[is.na(combined$Value) != TRUE,]
nboots = 2
#links: source, target, value
#source: node, nodegroup
combined_D3obj <-list(Nodes=combined[,(nboots+3):(nboots+4)],
Links=combined[,c((nboots+2):(nboots+1),ncol(combined))])
library(networkD3)
Node_source <- as.vector(sort(unique(combined_D3obj$Links$Source)))
Node_target <- as.vector(sort(unique(combined_D3obj$Links$Target)))
Node_all <-unique(c(Node_source, Node_target))
#assign IDs for Source (start from 0)
Source <-combined_D3obj$Links$Source
Target <- combined_D3obj$Links$Target
for(i in 1:length(Node_all)){
Source[Source==Node_all[i]] <-i-1
Target[Target==Node_all[i]] <-i-1
}
#
combined_D3obj$Links$Source <- as.numeric(Source)
combined_D3obj$Links$Target <- as.numeric(Target)
combined_D3obj$Links$LinkColor <- combined$NodeGroup
#prepare node info
node_df <-data.frame(Node=Node_all)
node_df$id <-as.numeric(c(0, 1:(length(Node_all)-1)))
suppressMessages(library(dplyr))
Color <- combined %>% count(Node, color=NodeGroup) %>% select(2)
node_df$color <- Color$color
suppressMessages(library(networkD3))
p1<-sankeyNetwork(Links =combined_D3obj$Links, Nodes = node_df,
Value = "Value", NodeGroup ="color", LinkGroup = "LinkColor",
NodeID="Node", Source="Source", Target="Target", fontSize = 22)
p1
#saveNetwork(p1, file = paste0(path,'Subpopulation_Net.html'))
Here we look at one example use case to find relationship between clusters within one sample or between two sample
#run prediction for 3 clusters
cluster_mixedpop1 <- colData(mixedpop1)[,1]
cluster_mixedpop2 <- colData(mixedpop2)[,1]
row_cluster <-length(unique(colData(mixedpop2)[,1]))
c_selectID <- 1
#top 200 gene markers distinguishing cluster 1
genes = DEgenes$id[1:200]
LSOLDA_dat1 <- bootstrap_prediction(nboots = 2, mixedpop1 = mixedpop1,
mixedpop2 = mixedpop2, genes=genes, c_selectID,
listData =list(),
cluster_mixedpop1 = cluster_mixedpop1,
cluster_mixedpop2 = cluster_mixedpop2)
c_selectID <- 2
genes = DEgenes$id[1:200]
LSOLDA_dat2 <- bootstrap_prediction(nboots = 2,mixedpop1 = mixedpop1,
mixedpop2 = mixedpop2, genes=genes, c_selectID,
listData =list(),
cluster_mixedpop1 = cluster_mixedpop1,
cluster_mixedpop2 = cluster_mixedpop2)
c_selectID <- 3
genes = DEgenes$id[1:200]
LSOLDA_dat3 <- bootstrap_prediction(nboots = 2,mixedpop1 = mixedpop1,
mixedpop2 = mixedpop2, genes=genes, c_selectID,
listData =list(),
cluster_mixedpop1 = cluster_mixedpop1,
cluster_mixedpop2 = cluster_mixedpop2)
#prepare table input for sankey plot
LASSO_C1S1 <- reformat_LASSO(c_selectID=1, mp_selectID = 1,
LSOLDA_dat=LSOLDA_dat1, nPredSubpop = row_cluster,
Nodes_group = "#7570b3")
LASSO_C2S1 <- reformat_LASSO(c_selectID=2, mp_selectID = 1,
LSOLDA_dat=LSOLDA_dat2, nPredSubpop = row_cluster,
Nodes_group = "#1b9e77")
LASSO_C3S1 <- reformat_LASSO(c_selectID=3, mp_selectID = 1,
LSOLDA_dat=LSOLDA_dat3, nPredSubpop = row_cluster,
Nodes_group = "#e7298a")
combined <- rbind(LASSO_C1S1,LASSO_C2S1,LASSO_C3S1)
nboots = 2
#links: source, target, value
#source: node, nodegroup
combined_D3obj <-list(Nodes=combined[,(nboots+3):(nboots+4)],
Links=combined[,c((nboots+2):(nboots+1),ncol(combined))])
combined <- combined[is.na(combined$Value) != TRUE,]
library(networkD3)
Node_source <- as.vector(sort(unique(combined_D3obj$Links$Source)))
Node_target <- as.vector(sort(unique(combined_D3obj$Links$Target)))
Node_all <-unique(c(Node_source, Node_target))
#assign IDs for Source (start from 0)
Source <-combined_D3obj$Links$Source
Target <- combined_D3obj$Links$Target
for(i in 1:length(Node_all)){
Source[Source==Node_all[i]] <-i-1
Target[Target==Node_all[i]] <-i-1
}
combined_D3obj$Links$Source <- as.numeric(Source)
combined_D3obj$Links$Target <- as.numeric(Target)
combined_D3obj$Links$LinkColor <- combined$NodeGroup
#prepare node info
node_df <-data.frame(Node=Node_all)
node_df$id <-as.numeric(c(0, 1:(length(Node_all)-1)))
suppressMessages(library(dplyr))
n <- length(unique(node_df$Node))
getPalette = colorRampPalette(RColorBrewer::brewer.pal(9, "Set1"))
Color = getPalette(n)
node_df$color <- Color
suppressMessages(library(networkD3))
p1<-sankeyNetwork(Links =combined_D3obj$Links, Nodes = node_df,
Value = "Value", NodeGroup ="color", LinkGroup = "LinkColor",
NodeID="Node", Source="Source", Target="Target", fontSize = 22)
p1
#saveNetwork(p1, file = paste0(path,'Subpopulation_Net.html'))
devtools::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 3.6.3 (2020-02-29)
#> os macOS Catalina 10.15.5
#> system x86_64, darwin15.6.0
#> ui X11
#> language (EN)
#> collate en_AU.UTF-8
#> ctype en_AU.UTF-8
#> tz Australia/Brisbane
#> date 2020-12-16
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date lib
#> annotate 1.64.0 2019-10-29 [2]
#> AnnotationDbi * 1.48.0 2019-10-29 [2]
#> assertthat 0.2.1 2019-03-21 [2]
#> backports 1.2.0 2020-11-02 [2]
#> base64enc 0.1-3 2015-07-28 [2]
#> Biobase * 2.46.0 2019-10-29 [2]
#> BiocGenerics * 0.32.0 2019-10-29 [2]
#> BiocManager 1.30.10 2019-11-16 [2]
#> BiocParallel * 1.20.1 2019-12-21 [2]
#> bit 4.0.4 2020-08-04 [2]
#> bit64 4.0.5 2020-08-30 [2]
#> bitops 1.0-6 2013-08-17 [2]
#> blob 1.2.1 2020-01-20 [2]
#> callr 3.5.1 2020-10-13 [2]
#> caret * 6.0-86 2020-03-20 [2]
#> checkmate 2.0.0 2020-02-06 [2]
#> class 7.3-15 2019-01-01 [3]
#> cli 2.2.0 2020-11-20 [2]
#> cluster 2.1.0 2019-06-19 [3]
#> clusterProfiler * 3.14.3 2020-01-08 [2]
#> codetools 0.2-16 2018-12-24 [3]
#> colorspace 2.0-0 2020-11-11 [2]
#> cowplot 1.1.0 2020-09-08 [2]
#> crayon 1.3.4 2017-09-16 [2]
#> data.table 1.13.2 2020-10-19 [2]
#> DBI 1.1.0 2019-12-15 [2]
#> DelayedArray * 0.12.3 2020-04-09 [2]
#> dendextend 1.14.0 2020-08-26 [2]
#> desc 1.2.0 2018-05-01 [2]
#> DESeq2 1.26.0 2019-10-29 [2]
#> devtools 2.3.2 2020-09-18 [2]
#> digest 0.6.27 2020-10-24 [2]
#> DO.db 2.9 2020-11-30 [2]
#> DOSE * 3.12.0 2019-10-29 [2]
#> dplyr * 1.0.2 2020-08-18 [2]
#> dynamicTreeCut * 1.63-1 2016-03-11 [2]
#> e1071 1.7-4 2020-10-14 [2]
#> ellipsis 0.3.1 2020-05-15 [2]
#> enrichplot 1.6.1 2019-12-16 [2]
#> europepmc 0.4 2020-05-31 [2]
#> evaluate 0.14 2019-05-28 [2]
#> fansi 0.4.1 2020-01-08 [2]
#> farver 2.0.3 2020-01-16 [2]
#> fastcluster 1.1.25 2018-06-07 [2]
#> fastmatch 1.1-0 2017-01-28 [2]
#> fgsea 1.12.0 2019-10-29 [2]
#> foreach 1.5.1 2020-10-15 [2]
#> foreign 0.8-75 2020-01-20 [3]
#> Formula 1.2-4 2020-10-16 [2]
#> fs 1.5.0 2020-07-31 [2]
#> genefilter 1.68.0 2019-10-29 [2]
#> geneplotter 1.64.0 2019-10-29 [2]
#> generics 0.1.0 2020-10-31 [2]
#> GenomeInfoDb * 1.22.1 2020-03-27 [2]
#> GenomeInfoDbData 1.2.2 2020-11-30 [2]
#> GenomicRanges * 1.38.0 2019-10-29 [2]
#> ggforce 0.3.2 2020-06-23 [2]
#> ggplot2 * 3.3.2 2020-06-19 [2]
#> ggplotify 0.0.5 2020-03-12 [2]
#> ggraph 2.0.4 2020-11-16 [2]
#> ggrepel 0.8.2 2020-03-08 [2]
#> ggridges 0.5.2 2020-01-12 [2]
#> glmnet 4.0-2 2020-06-16 [2]
#> glue 1.4.2 2020-08-27 [2]
#> GO.db 3.10.0 2020-11-30 [2]
#> GOSemSim 2.12.1 2020-03-19 [2]
#> gower 0.2.2 2020-06-23 [2]
#> graph 1.64.0 2019-10-29 [2]
#> graphite 1.32.0 2019-10-29 [2]
#> graphlayouts 0.7.1 2020-10-26 [2]
#> gridExtra 2.3 2017-09-09 [2]
#> gridGraphics 0.5-0 2020-02-25 [2]
#> gtable 0.3.0 2019-03-25 [2]
#> Hmisc 4.4-2 2020-11-29 [2]
#> hms 0.5.3 2020-01-08 [2]
#> htmlTable 2.1.0 2020-09-16 [2]
#> htmltools 0.5.0 2020-06-16 [2]
#> htmlwidgets 1.5.2 2020-10-03 [2]
#> httr 1.4.2 2020-07-20 [2]
#> igraph 1.2.6 2020-10-06 [2]
#> ipred 0.9-9 2019-04-28 [2]
#> IRanges * 2.20.2 2020-01-13 [2]
#> iterators 1.0.13 2020-10-15 [2]
#> jpeg 0.1-8.1 2019-10-24 [2]
#> jsonlite 1.7.1 2020-09-07 [2]
#> knitr 1.30 2020-09-22 [2]
#> labeling 0.4.2 2020-10-20 [2]
#> lattice * 0.20-38 2018-11-04 [3]
#> latticeExtra 0.6-29 2019-12-19 [2]
#> lava 1.6.8.1 2020-11-04 [2]
#> lifecycle 0.2.0 2020-03-06 [2]
#> locfit * 1.5-9.4 2020-03-25 [2]
#> lubridate 1.7.9.2 2020-11-13 [2]
#> magrittr 2.0.1 2020-11-17 [2]
#> MASS 7.3-51.5 2019-12-20 [3]
#> Matrix 1.2-18 2019-11-27 [3]
#> matrixStats * 0.57.0 2020-09-25 [2]
#> memoise 1.1.0 2017-04-21 [2]
#> ModelMetrics 1.2.2.2 2020-03-17 [2]
#> munsell 0.5.0 2018-06-12 [2]
#> networkD3 * 0.4 2017-03-18 [2]
#> nlme 3.1-144 2020-02-06 [3]
#> nnet 7.3-12 2016-02-02 [3]
#> org.Hs.eg.db * 3.10.0 2020-11-30 [2]
#> pillar 1.4.7 2020-11-20 [2]
#> pkgbuild 1.1.0 2020-07-13 [2]
#> pkgconfig 2.0.3 2019-09-22 [2]
#> pkgdown 1.6.1.9000 2020-12-14 [2]
#> pkgload 1.1.0 2020-05-29 [2]
#> plyr 1.8.6 2020-03-03 [2]
#> png 0.1-7 2013-12-03 [2]
#> polyclip 1.10-0 2019-03-14 [2]
#> prettyunits 1.1.1 2020-01-24 [2]
#> pROC 1.16.2 2020-03-19 [2]
#> processx 3.4.4 2020-09-03 [2]
#> prodlim 2019.11.13 2019-11-17 [2]
#> progress 1.2.2 2019-05-16 [2]
#> ps 1.4.0 2020-10-07 [2]
#> purrr 0.3.4 2020-04-17 [2]
#> qvalue 2.18.0 2019-10-29 [2]
#> R6 2.5.0 2020-10-28 [2]
#> ragg 0.4.0 2020-10-05 [2]
#> rappdirs 0.3.1 2016-03-28 [2]
#> RColorBrewer 1.1-2 2014-12-07 [2]
#> Rcpp 1.0.5 2020-07-06 [2]
#> RcppArmadillo 0.10.1.2.0 2020-11-16 [2]
#> RcppParallel 5.0.2 2020-06-24 [2]
#> RCurl 1.98-1.2 2020-04-18 [2]
#> reactome.db 1.70.0 2020-11-30 [2]
#> ReactomePA * 1.30.0 2019-10-29 [2]
#> recipes 0.1.15 2020-11-11 [2]
#> remotes 2.2.0 2020-07-21 [2]
#> reshape2 1.4.4 2020-04-09 [2]
#> rlang 0.4.9 2020-11-26 [2]
#> rmarkdown 2.5 2020-10-21 [2]
#> rpart 4.1-15 2019-04-12 [3]
#> rprojroot 2.0.2 2020-11-15 [2]
#> RSQLite 2.2.1 2020-09-30 [2]
#> rstudioapi 0.13 2020-11-12 [2]
#> Rtsne 0.15 2018-11-10 [2]
#> rvcheck 0.1.8 2020-03-01 [2]
#> S4Vectors * 0.24.4 2020-04-09 [2]
#> scales 1.1.1 2020-05-11 [2]
#> scGPS * 1.5.1 2020-12-16 [1]
#> sessioninfo 1.1.1 2018-11-05 [2]
#> shape 1.4.5 2020-09-13 [2]
#> SingleCellExperiment * 1.8.0 2019-10-29 [2]
#> stringi 1.5.3 2020-09-09 [2]
#> stringr 1.4.0 2019-02-10 [2]
#> SummarizedExperiment * 1.16.1 2019-12-19 [2]
#> survival 3.1-8 2019-12-03 [3]
#> systemfonts 0.3.2 2020-09-29 [2]
#> testthat 3.0.0 2020-10-31 [2]
#> textshaping 0.2.1 2020-11-13 [2]
#> tibble 3.0.4 2020-10-12 [2]
#> tidygraph 1.2.0 2020-05-12 [2]
#> tidyr 1.1.2 2020-08-27 [2]
#> tidyselect 1.1.0 2020-05-11 [2]
#> timeDate 3043.102 2018-02-21 [2]
#> triebeard 0.3.0 2016-08-04 [2]
#> tweenr 1.0.1 2018-12-14 [2]
#> urltools 1.7.3 2019-04-14 [2]
#> usethis 1.6.3 2020-09-17 [2]
#> vctrs 0.3.5 2020-11-17 [2]
#> viridis 0.5.1 2018-03-29 [2]
#> viridisLite 0.3.0 2018-02-01 [2]
#> withr 2.3.0 2020-09-22 [2]
#> xfun 0.19 2020-10-30 [2]
#> XML 3.99-0.3 2020-01-20 [2]
#> xml2 1.3.2 2020-04-23 [2]
#> xtable 1.8-4 2019-04-21 [2]
#> XVector 0.26.0 2019-10-29 [2]
#> yaml 2.2.1 2020-02-01 [2]
#> zlibbioc 1.32.0 2019-10-29 [2]
#> source
#> Bioconductor
#> Bioconductor
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> Bioconductor
#> Bioconductor
#> CRAN (R 3.6.0)
#> Bioconductor
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.3)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.3)
#> Bioconductor
#> CRAN (R 3.6.3)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> Bioconductor
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> Bioconductor
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> Bioconductor
#> Bioconductor
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> Bioconductor
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> Bioconductor
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.3)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> Bioconductor
#> Bioconductor
#> CRAN (R 3.6.2)
#> Bioconductor
#> Bioconductor
#> Bioconductor
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> Bioconductor
#> Bioconductor
#> CRAN (R 3.6.2)
#> Bioconductor
#> Bioconductor
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.3)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> Bioconductor
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.3)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.3)
#> CRAN (R 3.6.3)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.3)
#> CRAN (R 3.6.3)
#> Bioconductor
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> Github (r-lib/pkgdown@6094ac3)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> Bioconductor
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> Bioconductor
#> Bioconductor
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.3)
#> CRAN (R 3.6.3)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> Bioconductor
#> CRAN (R 3.6.2)
#> Bioconductor
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> Bioconductor
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> Bioconductor
#> CRAN (R 3.6.3)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> CRAN (R 3.6.2)
#> CRAN (R 3.6.0)
#> Bioconductor
#> CRAN (R 3.6.0)
#> Bioconductor
#>
#> [1] /private/var/folders/ly/hvwnyg4x6f555q7szp3grcfh0000gr/T/Rtmp5g0gPX/temp_libpath36067156566d
#> [2] /Users/uqmtho32/Library/R/3.6/library
#> [3] /Library/Frameworks/R.framework/Versions/3.6/Resources/library