# 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)
::install_github("IMB-Computational-Genomics-Lab/scGPS")
devtools
# for C++ compilation trouble-shooting, manual download and installation can be
# done from github
://github.com/IMB-Computational-Genomics-Lab/scGPS
git clone https
# 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
::install()
devtools#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)
day_2_cardio_cell_sample
day2 <- new_scGPS_object(ExpressionMatrix = day2$dat2_counts,
mixedpop1 <-GeneMetadata = day2$dat2geneInfo, CellMetadata = day2$dat2_clusters)
# load mixed population 2 (loaded from day_5_cardio_cell_sample dataset,
# named it as day5)
day_5_cardio_cell_sample
day5 <- new_scGPS_object(ExpressionMatrix = day5$dat5_counts,
mixedpop2 <-GeneMetadata = day5$dat5geneInfo, CellMetadata = day5$dat5_clusters)
# select a subpopulation
1
c_selectID <-# load gene list (this can be any lists of user selected genes)
training_gene_sample
genes <- genes$Merged_unique
genes <-# load cluster information
colData(mixedpop1)[,1]
cluster_mixedpop1 <- colData(mixedpop2)[,1]
cluster_mixedpop2 <-#run training (running nboots = 3 here, but recommend to use nboots = 50-100)
bootstrap_prediction(nboots = 3, mixedpop1 = mixedpop1,
LSOLDA_dat <-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
summary_prediction_lda(LSOLDA_dat = LSOLDA_dat, nPredSubpop = 4)
sum_pred_lda <-# summary results Lasso to show the percent of cells
# classified as cells belonging
summary_prediction_lasso(LSOLDA_dat = LSOLDA_dat,
sum_pred_lasso <-nPredSubpop = 4)
# plot summary results
function(sum_dat){
plot_sum <- t(sum_dat)
sum_dat_tf <- na.omit(sum_dat_tf)
sum_dat_tf <- apply(sum_dat[, -ncol(sum_dat)],1,
sum_dat_tf <-function(x){as.numeric(as.vector(x))})
$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)
sum_datcolnames(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] 61.39535 68.57143 60.74766
# summary maximum deviance explained by the model
summary_deviance(object = LSOLDA_dat)
#> $allDeviance
#> [1] "10.55" "5.84" "11.36"
#>
#> $DeviMax
#> dat_DE$Dfd Deviance DEgenes
#> 1 0 5.84 genes_cluster1
#> 2 1 5.84 genes_cluster1
#> 3 2 5.84 genes_cluster1
#> 4 3 5.84 genes_cluster1
#> 5 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
day_5_cardio_cell_sample
day5 <- colnames(day5$dat5_counts)
cellnames <-$dat5_clusters
cluster <-day5data.frame("Cluster"=cluster, "cellBarcodes" = cellnames)
cellnames <-new_scGPS_object(ExpressionMatrix = day5$dat5_counts,
mixedpop2 <-GeneMetadata = day5$dat5geneInfo, CellMetadata = cellnames)
CORE_clustering(mixedpop2, remove_outlier = c(0), PCA=FALSE)
CORE_cluster <-
# to update the clustering information, users can ...
CORE_cluster$optimalClust$KeyStats$Height
key_height <- CORE_cluster$optimalClust$OptimalRes
optimal_res <- which(key_height == optimal_res)
optimal_index =
unname(unlist(
clustering_after_outlier_removal <-$Cluster[[optimal_index]]))
CORE_cluster CORE_cluster$cellsForClustering
corresponding_cells_after_outlier_removal <- colData(mixedpop2)[,2]
original_cells_before_removal <- match(corresponding_cells_after_outlier_removal,
corresponding_index <-
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[,corresponding_index]
mixedpop2_post_clustering <-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
day_5_cardio_cell_sample
day5 <- colnames(day5$dat5_counts)
cellnames <-$dat5_clusters
cluster <-day5data.frame("Cluster"=cluster, "cellBarcodes" = cellnames)
cellnames <-new_scGPS_object(ExpressionMatrix = day5$dat5_counts,
mixedpop2 <-GeneMetadata = day5$dat5geneInfo, CellMetadata = cellnames )
CORE_bagging(mixedpop2, remove_outlier = c(0), PCA=FALSE,
SCORE_test <-bagging_run = 20, subsample_proportion = .8)
dev.off()
#> null device
#> 1
##3.2.1 plot CORE clustering
plot_CORE(CORE_cluster$tree, CORE_cluster$Cluster,
p1 <-color_branch = c("#208eb7", "#6ce9d3", "#1c5e39", "#8fca40", "#154975",
"#b1c8eb"))
p1#> $mar
#> [1] 1 5 0 1
#extract optimal index identified by CORE
CORE_cluster$optimalClust$KeyStats$Height
key_height <- CORE_cluster$optimalClust$OptimalRes
optimal_res <- which(key_height == optimal_res)
optimal_index =#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[
$optimal_index]),
SCORE_testshift = -100)
#> Ordering and assigning labels...
#> 2
#> 162335NA
#> 3
#> 162335423
#> Plotting the colored dendrogram now....
#> Plotting the bar underneath now....
tSNE(expression.mat=assay(mixedpop2))
t <-#> Preparing PCA inputs using the top 1500 genes ...
#> Computing PCA values...
#> Running tSNE ...
plot_reduced(t, color_fac = factor(colData(mixedpop2)[,1]),
p2 <-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$Merged_unique
genes <-genes
#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))
find_markers(expression_matrix=assay(mixedpop2),
DEgenes <-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
DEgenes$DE_Subpop1vsRemaining$id
DEgeneList_1vsOthers <-
#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))
as.factor(DEgeneList_1vsOthers[seq_len(500)])
genes500 <- annotate_clusters(genes, pvalueCutoff=0.05, gene_symbol=TRUE)
enrichment_test <-
#the enrichment outputs can be displayed by running
::dotplot(enrichment_test, showCategory=10, font.size = 6) clusterProfiler
The purpose of this workflow is to solve the following task:
#select a subpopulation, and input gene list
1
c_selectID <-#note make sure the format for genes input here is the same to the format
#for genes in the mixedpop1 and mixedpop2
DEgenes$id[1:500]
genes =
#run the test bootstrap with nboots = 2 runs
colData(mixedpop1)[,1]
cluster_mixedpop1 <- colData(mixedpop2)[,1]
cluster_mixedpop2 <-
bootstrap_prediction(nboots = 2, mixedpop1 = mixedpop1,
LSOLDA_dat <-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
length(unique(colData(mixedpop2)[,1]))
row_cluster <-
#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 21.3903743315508 41.7112299465241 LDA for subpop 1 in target mixedpop2
#> 2 95.7142857142857 75 LDA for subpop 2 in target mixedpop2
#> 3 23.3082706766917 37.593984962406 LDA for subpop 3 in target mixedpop2
#> 4 50 52.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 9.62566844919786 64.7058823529412 ElasticNet for subpop1 in target mixedpop2
#> 2 99.2857142857143 98.5714285714286 ElasticNet for subpop2 in target mixedpop2
#> 3 86.4661654135338 75.187969924812 ElasticNet for subpop3 in target mixedpop2
#> 4 90 87.5 ElasticNet for subpop4 in target mixedpop2
# summary maximum deviance explained by the model during the model training
summary_deviance(object = LSOLDA_dat)
#> $allDeviance
#> [1] "39.71" "47.21"
#>
#> $DeviMax
#> dat_DE$Dfd Deviance DEgenes
#> 1 0 47.21 genes_cluster1
#> 2 1 47.21 genes_cluster1
#> 3 2 47.21 genes_cluster1
#> 4 3 47.21 genes_cluster1
#> 5 4 47.21 genes_cluster1
#> 6 5 47.21 genes_cluster1
#> 7 8 47.21 genes_cluster1
#> 8 9 47.21 genes_cluster1
#> 9 11 47.21 genes_cluster1
#> 10 14 47.21 genes_cluster1
#> 11 18 47.21 genes_cluster1
#> 12 20 47.21 genes_cluster1
#> 13 23 47.21 genes_cluster1
#> 14 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] 72.76786 70.53571
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
colData(mixedpop1)[,1]
cluster_mixedpop1 <- colData(mixedpop2)[,1]
cluster_mixedpop2 <-#cluster_mixedpop2 <- as.numeric(as.vector(colData(mixedpop2)[,1]))
1
c_selectID <-#top 200 gene markers distinguishing cluster 1
DEgenes$id[1:200]
genes =
bootstrap_prediction(nboots = 2, mixedpop1 = mixedpop2,
LSOLDA_dat1 <-mixedpop2 = mixedpop2, genes=genes, c_selectID,
listData =list(),
cluster_mixedpop1 = cluster_mixedpop2,
cluster_mixedpop2 = cluster_mixedpop2)
2
c_selectID <- DEgenes$id[1:200]
genes =
bootstrap_prediction(nboots = 2,mixedpop1 = mixedpop2,
LSOLDA_dat2 <-mixedpop2 = mixedpop2, genes=genes, c_selectID,
listData =list(),
cluster_mixedpop1 = cluster_mixedpop2,
cluster_mixedpop2 = cluster_mixedpop2)
3
c_selectID <- DEgenes$id[1:200]
genes = bootstrap_prediction(nboots = 2,mixedpop1 = mixedpop2,
LSOLDA_dat3 <-mixedpop2 = mixedpop2, genes=genes, c_selectID,
listData =list(),
cluster_mixedpop1 = cluster_mixedpop2,
cluster_mixedpop2 = cluster_mixedpop2)
4
c_selectID <- DEgenes$id[1:200]
genes = bootstrap_prediction(nboots = 2,mixedpop1 = mixedpop2,
LSOLDA_dat4 <-mixedpop2 = mixedpop2, genes=genes, c_selectID,
listData =list(),
cluster_mixedpop1 = cluster_mixedpop2,
cluster_mixedpop2 = cluster_mixedpop2)
#prepare table input for sankey plot
reformat_LASSO(c_selectID=1, mp_selectID = 2,
LASSO_C1S2 <-LSOLDA_dat=LSOLDA_dat1,
nPredSubpop = length(unique(colData(mixedpop2)
1])),
[,Nodes_group ="#7570b3")
reformat_LASSO(c_selectID=2, mp_selectID =2,
LASSO_C2S2 <-LSOLDA_dat=LSOLDA_dat2,
nPredSubpop = length(unique(colData(mixedpop2)
1])),
[,Nodes_group ="#1b9e77")
reformat_LASSO(c_selectID=3, mp_selectID =2,
LASSO_C3S2 <-LSOLDA_dat=LSOLDA_dat3,
nPredSubpop = length(unique(colData(mixedpop2)
1])),
[,Nodes_group ="#e7298a")
reformat_LASSO(c_selectID=4, mp_selectID =2,
LASSO_C4S2 <-LSOLDA_dat=LSOLDA_dat4,
nPredSubpop = length(unique(colData(mixedpop2)
1])),
[,Nodes_group ="#00FFFF")
rbind(LASSO_C1S2,LASSO_C2S2,LASSO_C3S2, LASSO_C4S2 )
combined <- combined[is.na(combined$Value) != TRUE,]
combined <-
2
nboots =#links: source, target, value
#source: node, nodegroup
list(Nodes=combined[,(nboots+3):(nboots+4)],
combined_D3obj <-Links=combined[,c((nboots+2):(nboots+1),ncol(combined))])
library(networkD3)
as.vector(sort(unique(combined_D3obj$Links$Source)))
Node_source <- as.vector(sort(unique(combined_D3obj$Links$Target)))
Node_target <-unique(c(Node_source, Node_target))
Node_all <-
#assign IDs for Source (start from 0)
$Links$Source
Source <-combined_D3obj combined_D3obj$Links$Target
Target <-
for(i in 1:length(Node_all)){
==Node_all[i]] <-i-1
Source[Source==Node_all[i]] <-i-1
Target[Target
}#
$Links$Source <- as.numeric(Source)
combined_D3obj$Links$Target <- as.numeric(Target)
combined_D3obj$Links$LinkColor <- combined$NodeGroup
combined_D3obj
#prepare node info
data.frame(Node=Node_all)
node_df <-$id <-as.numeric(c(0, 1:(length(Node_all)-1)))
node_df
suppressMessages(library(dplyr))
combined %>% count(Node, color=NodeGroup) %>% select(2)
Color <-$color <- Color$color
node_df
suppressMessages(library(networkD3))
sankeyNetwork(Links =combined_D3obj$Links, Nodes = node_df,
p1<-Value = "Value", NodeGroup ="color", LinkGroup = "LinkColor",
NodeID="Node", Source="Source", Target="Target", fontSize = 22)
p1
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
colData(mixedpop1)[,1]
cluster_mixedpop1 <- colData(mixedpop2)[,1]
cluster_mixedpop2 <-length(unique(colData(mixedpop2)[,1]))
row_cluster <-
1
c_selectID <-#top 200 gene markers distinguishing cluster 1
DEgenes$id[1:200]
genes = bootstrap_prediction(nboots = 2, mixedpop1 = mixedpop1,
LSOLDA_dat1 <-mixedpop2 = mixedpop2, genes=genes, c_selectID,
listData =list(),
cluster_mixedpop1 = cluster_mixedpop1,
cluster_mixedpop2 = cluster_mixedpop2)
2
c_selectID <- DEgenes$id[1:200]
genes = bootstrap_prediction(nboots = 2,mixedpop1 = mixedpop1,
LSOLDA_dat2 <-mixedpop2 = mixedpop2, genes=genes, c_selectID,
listData =list(),
cluster_mixedpop1 = cluster_mixedpop1,
cluster_mixedpop2 = cluster_mixedpop2)
3
c_selectID <- DEgenes$id[1:200]
genes = bootstrap_prediction(nboots = 2,mixedpop1 = mixedpop1,
LSOLDA_dat3 <-mixedpop2 = mixedpop2, genes=genes, c_selectID,
listData =list(),
cluster_mixedpop1 = cluster_mixedpop1,
cluster_mixedpop2 = cluster_mixedpop2)
#prepare table input for sankey plot
reformat_LASSO(c_selectID=1, mp_selectID = 1,
LASSO_C1S1 <-LSOLDA_dat=LSOLDA_dat1, nPredSubpop = row_cluster,
Nodes_group = "#7570b3")
reformat_LASSO(c_selectID=2, mp_selectID = 1,
LASSO_C2S1 <-LSOLDA_dat=LSOLDA_dat2, nPredSubpop = row_cluster,
Nodes_group = "#1b9e77")
reformat_LASSO(c_selectID=3, mp_selectID = 1,
LASSO_C3S1 <-LSOLDA_dat=LSOLDA_dat3, nPredSubpop = row_cluster,
Nodes_group = "#e7298a")
rbind(LASSO_C1S1,LASSO_C2S1,LASSO_C3S1)
combined <-
2
nboots =#links: source, target, value
#source: node, nodegroup
list(Nodes=combined[,(nboots+3):(nboots+4)],
combined_D3obj <-Links=combined[,c((nboots+2):(nboots+1),ncol(combined))])
combined[is.na(combined$Value) != TRUE,]
combined <-
library(networkD3)
as.vector(sort(unique(combined_D3obj$Links$Source)))
Node_source <- as.vector(sort(unique(combined_D3obj$Links$Target)))
Node_target <-unique(c(Node_source, Node_target))
Node_all <-
#assign IDs for Source (start from 0)
$Links$Source
Source <-combined_D3obj combined_D3obj$Links$Target
Target <-
for(i in 1:length(Node_all)){
==Node_all[i]] <-i-1
Source[Source==Node_all[i]] <-i-1
Target[Target
}
$Links$Source <- as.numeric(Source)
combined_D3obj$Links$Target <- as.numeric(Target)
combined_D3obj$Links$LinkColor <- combined$NodeGroup
combined_D3obj
#prepare node info
data.frame(Node=Node_all)
node_df <-$id <-as.numeric(c(0, 1:(length(Node_all)-1)))
node_df
suppressMessages(library(dplyr))
length(unique(node_df$Node))
n <- colorRampPalette(RColorBrewer::brewer.pal(9, "Set1"))
getPalette = getPalette(n)
Color =$color <- Color
node_dfsuppressMessages(library(networkD3))
sankeyNetwork(Links =combined_D3obj$Links, Nodes = node_df,
p1<-Value = "Value", NodeGroup ="color", LinkGroup = "LinkColor",
NodeID="Node", Source="Source", Target="Target", fontSize = 22)
p1
::session_info()
devtools#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R Under development (unstable) (2022-10-25 r83175)
#> os Ubuntu 22.04.1 LTS
#> system x86_64, linux-gnu
#> ui X11
#> language (EN)
#> collate C
#> ctype en_US.UTF-8
#> tz America/New_York
#> date 2022-11-01
#> pandoc 2.9.2.1 @ /usr/bin/ (via rmarkdown)
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date (UTC) lib source
#> annotate 1.77.0 2022-11-01 [2] Bioconductor
#> AnnotationDbi * 1.61.0 2022-11-01 [2] Bioconductor
#> ape 5.6-2 2022-03-02 [2] CRAN (R 4.3.0)
#> aplot 0.1.8 2022-10-09 [2] CRAN (R 4.3.0)
#> assertthat 0.2.1 2019-03-21 [2] CRAN (R 4.3.0)
#> Biobase * 2.59.0 2022-11-01 [2] Bioconductor
#> BiocGenerics * 0.45.0 2022-11-01 [2] Bioconductor
#> BiocParallel 1.33.0 2022-11-01 [2] Bioconductor
#> Biostrings 2.67.0 2022-11-01 [2] Bioconductor
#> bit 4.0.4 2020-08-04 [2] CRAN (R 4.3.0)
#> bit64 4.0.5 2020-08-30 [2] CRAN (R 4.3.0)
#> bitops 1.0-7 2021-04-24 [2] CRAN (R 4.3.0)
#> blob 1.2.3 2022-04-10 [2] CRAN (R 4.3.0)
#> bslib 0.4.0 2022-07-16 [2] CRAN (R 4.3.0)
#> cachem 1.0.6 2021-08-19 [2] CRAN (R 4.3.0)
#> callr 3.7.2 2022-08-22 [2] CRAN (R 4.3.0)
#> caret * 6.0-93 2022-08-09 [2] CRAN (R 4.3.0)
#> class 7.3-20.1 2022-05-30 [2] CRAN (R 4.3.0)
#> cli 3.4.1 2022-09-23 [2] CRAN (R 4.3.0)
#> clusterProfiler * 4.7.0 2022-11-01 [2] Bioconductor
#> codetools 0.2-18 2020-11-04 [2] CRAN (R 4.3.0)
#> colorspace 2.0-3 2022-02-21 [2] CRAN (R 4.3.0)
#> cowplot 1.1.1 2020-12-30 [2] CRAN (R 4.3.0)
#> crayon 1.5.2 2022-09-29 [2] CRAN (R 4.3.0)
#> data.table 1.14.4 2022-10-17 [2] CRAN (R 4.3.0)
#> DBI 1.1.3 2022-06-18 [2] CRAN (R 4.3.0)
#> DelayedArray 0.25.0 2022-11-01 [2] Bioconductor
#> dendextend 1.16.0 2022-07-04 [2] CRAN (R 4.3.0)
#> DESeq2 1.39.0 2022-11-01 [2] Bioconductor
#> devtools 2.4.5 2022-10-11 [2] CRAN (R 4.3.0)
#> digest 0.6.30 2022-10-18 [2] CRAN (R 4.3.0)
#> DOSE * 3.25.0 2022-11-01 [2] Bioconductor
#> downloader 0.4 2015-07-09 [2] CRAN (R 4.3.0)
#> dplyr * 1.0.10 2022-09-01 [2] CRAN (R 4.3.0)
#> dynamicTreeCut * 1.63-1 2016-03-11 [2] CRAN (R 4.3.0)
#> e1071 1.7-12 2022-10-24 [2] CRAN (R 4.3.0)
#> ellipsis 0.3.2 2021-04-29 [2] CRAN (R 4.3.0)
#> enrichplot 1.19.0 2022-11-01 [2] Bioconductor
#> evaluate 0.17 2022-10-07 [2] CRAN (R 4.3.0)
#> fansi 1.0.3 2022-03-24 [2] CRAN (R 4.3.0)
#> farver 2.1.1 2022-07-06 [2] CRAN (R 4.3.0)
#> fastcluster 1.2.3 2021-05-24 [2] CRAN (R 4.3.0)
#> fastmap 1.1.0 2021-01-25 [2] CRAN (R 4.3.0)
#> fastmatch 1.1-3 2021-07-23 [2] CRAN (R 4.3.0)
#> fgsea 1.25.0 2022-11-01 [2] Bioconductor
#> foreach 1.5.2 2022-02-02 [2] CRAN (R 4.3.0)
#> fs 1.5.2 2021-12-08 [2] CRAN (R 4.3.0)
#> future 1.28.0 2022-09-02 [2] CRAN (R 4.3.0)
#> future.apply 1.9.1 2022-09-07 [2] CRAN (R 4.3.0)
#> genefilter 1.81.0 2022-11-01 [2] Bioconductor
#> geneplotter 1.77.0 2022-11-01 [2] Bioconductor
#> generics 0.1.3 2022-07-05 [2] CRAN (R 4.3.0)
#> GenomeInfoDb * 1.35.0 2022-11-01 [2] Bioconductor
#> GenomeInfoDbData 1.2.9 2022-10-29 [2] Bioconductor
#> GenomicRanges * 1.51.0 2022-11-01 [2] Bioconductor
#> ggforce 0.4.1 2022-10-04 [2] CRAN (R 4.3.0)
#> ggfun 0.0.7 2022-08-31 [2] CRAN (R 4.3.0)
#> ggplot2 * 3.3.6 2022-05-03 [2] CRAN (R 4.3.0)
#> ggplotify 0.1.0 2021-09-02 [2] CRAN (R 4.3.0)
#> ggraph 2.1.0 2022-10-09 [2] CRAN (R 4.3.0)
#> ggrepel 0.9.1 2021-01-15 [2] CRAN (R 4.3.0)
#> ggtree 3.7.0 2022-11-01 [2] Bioconductor
#> glmnet 4.1-4 2022-04-15 [2] CRAN (R 4.3.0)
#> globals 0.16.1 2022-08-28 [2] CRAN (R 4.3.0)
#> glue 1.6.2 2022-02-24 [2] CRAN (R 4.3.0)
#> GO.db 3.16.0 2022-10-31 [2] Bioconductor
#> GOSemSim 2.25.0 2022-11-01 [2] Bioconductor
#> gower 1.0.0 2022-02-03 [2] CRAN (R 4.3.0)
#> graph 1.77.0 2022-11-01 [2] Bioconductor
#> graphite 1.45.0 2022-11-01 [2] Bioconductor
#> graphlayouts 0.8.3 2022-10-20 [2] CRAN (R 4.3.0)
#> gridExtra 2.3 2017-09-09 [2] CRAN (R 4.3.0)
#> gridGraphics 0.5-1 2020-12-13 [2] CRAN (R 4.3.0)
#> gson 0.0.9 2022-09-06 [2] CRAN (R 4.3.0)
#> gtable 0.3.1 2022-09-01 [2] CRAN (R 4.3.0)
#> hardhat 1.2.0 2022-06-30 [2] CRAN (R 4.3.0)
#> HDO.db 0.99.1 2022-10-31 [2] Bioconductor
#> highr 0.9 2021-04-16 [2] CRAN (R 4.3.0)
#> htmltools 0.5.3 2022-07-18 [2] CRAN (R 4.3.0)
#> htmlwidgets 1.5.4 2021-09-08 [2] CRAN (R 4.3.0)
#> httpuv 1.6.6 2022-09-08 [2] CRAN (R 4.3.0)
#> httr 1.4.4 2022-08-17 [2] CRAN (R 4.3.0)
#> igraph 1.3.5 2022-09-22 [2] CRAN (R 4.3.0)
#> ipred 0.9-13 2022-06-02 [2] CRAN (R 4.3.0)
#> IRanges * 2.33.0 2022-11-01 [2] Bioconductor
#> iterators 1.0.14 2022-02-05 [2] CRAN (R 4.3.0)
#> jquerylib 0.1.4 2021-04-26 [2] CRAN (R 4.3.0)
#> jsonlite 1.8.3 2022-10-21 [2] CRAN (R 4.3.0)
#> KEGGREST 1.39.0 2022-11-01 [2] Bioconductor
#> knitr 1.40 2022-08-24 [2] CRAN (R 4.3.0)
#> labeling 0.4.2 2020-10-20 [2] CRAN (R 4.3.0)
#> later 1.3.0 2021-08-18 [2] CRAN (R 4.3.0)
#> lattice * 0.20-45 2021-09-22 [2] CRAN (R 4.3.0)
#> lava 1.7.0 2022-10-25 [2] CRAN (R 4.3.0)
#> lazyeval 0.2.2 2019-03-15 [2] CRAN (R 4.3.0)
#> lifecycle 1.0.3 2022-10-07 [2] CRAN (R 4.3.0)
#> listenv 0.8.0 2019-12-05 [2] CRAN (R 4.3.0)
#> locfit * 1.5-9.6 2022-07-11 [2] CRAN (R 4.3.0)
#> lubridate 1.8.0 2021-10-07 [2] CRAN (R 4.3.0)
#> magrittr 2.0.3 2022-03-30 [2] CRAN (R 4.3.0)
#> MASS 7.3-58.1 2022-08-03 [2] CRAN (R 4.3.0)
#> Matrix 1.5-1 2022-09-13 [2] CRAN (R 4.3.0)
#> MatrixGenerics * 1.11.0 2022-11-01 [2] Bioconductor
#> matrixStats * 0.62.0 2022-04-19 [2] CRAN (R 4.3.0)
#> memoise 2.0.1 2021-11-26 [2] CRAN (R 4.3.0)
#> mime 0.12 2021-09-28 [2] CRAN (R 4.3.0)
#> miniUI 0.1.1.1 2018-05-18 [2] CRAN (R 4.3.0)
#> ModelMetrics 1.2.2.2 2020-03-17 [2] CRAN (R 4.3.0)
#> munsell 0.5.0 2018-06-12 [2] CRAN (R 4.3.0)
#> networkD3 * 0.4 2017-03-18 [2] CRAN (R 4.3.0)
#> nlme 3.1-160 2022-10-26 [2] local
#> nnet 7.3-18 2022-09-28 [2] CRAN (R 4.3.0)
#> org.Hs.eg.db * 3.16.0 2022-10-31 [2] Bioconductor
#> parallelly 1.32.1 2022-07-21 [2] CRAN (R 4.3.0)
#> patchwork 1.1.2 2022-08-19 [2] CRAN (R 4.3.0)
#> pillar 1.8.1 2022-08-19 [2] CRAN (R 4.3.0)
#> pkgbuild 1.3.1 2021-12-20 [2] CRAN (R 4.3.0)
#> pkgconfig 2.0.3 2019-09-22 [2] CRAN (R 4.3.0)
#> pkgload 1.3.1 2022-10-28 [2] CRAN (R 4.3.0)
#> plyr 1.8.7 2022-03-24 [2] CRAN (R 4.3.0)
#> png 0.1-7 2013-12-03 [2] CRAN (R 4.3.0)
#> polyclip 1.10-4 2022-10-20 [2] CRAN (R 4.3.0)
#> prettyunits 1.1.1 2020-01-24 [2] CRAN (R 4.3.0)
#> pROC 1.18.0 2021-09-03 [2] CRAN (R 4.3.0)
#> processx 3.8.0 2022-10-26 [2] CRAN (R 4.3.0)
#> prodlim 2019.11.13 2019-11-17 [2] CRAN (R 4.3.0)
#> profvis 0.3.7 2020-11-02 [2] CRAN (R 4.3.0)
#> promises 1.2.0.1 2021-02-11 [2] CRAN (R 4.3.0)
#> proxy 0.4-27 2022-06-09 [2] CRAN (R 4.3.0)
#> ps 1.7.2 2022-10-26 [2] CRAN (R 4.3.0)
#> purrr 0.3.5 2022-10-06 [2] CRAN (R 4.3.0)
#> qvalue 2.31.0 2022-11-01 [2] Bioconductor
#> R6 2.5.1 2021-08-19 [2] CRAN (R 4.3.0)
#> rappdirs 0.3.3 2021-01-31 [2] CRAN (R 4.3.0)
#> RColorBrewer 1.1-3 2022-04-03 [2] CRAN (R 4.3.0)
#> Rcpp 1.0.9 2022-07-08 [2] CRAN (R 4.3.0)
#> RcppArmadillo 0.11.4.0.1 2022-10-02 [2] CRAN (R 4.3.0)
#> RcppParallel 5.1.5 2022-01-05 [2] CRAN (R 4.3.0)
#> RCurl 1.98-1.9 2022-10-03 [2] CRAN (R 4.3.0)
#> reactome.db 1.82.0 2022-11-01 [2] Bioconductor
#> ReactomePA * 1.43.0 2022-11-01 [2] Bioconductor
#> recipes 1.0.2 2022-10-16 [2] CRAN (R 4.3.0)
#> remotes 2.4.2 2021-11-30 [2] CRAN (R 4.3.0)
#> reshape2 1.4.4 2020-04-09 [2] CRAN (R 4.3.0)
#> rlang 1.0.6 2022-09-24 [2] CRAN (R 4.3.0)
#> rmarkdown 2.17 2022-10-07 [2] CRAN (R 4.3.0)
#> rpart 4.1.19 2022-10-21 [2] CRAN (R 4.3.0)
#> RSQLite 2.2.18 2022-10-04 [2] CRAN (R 4.3.0)
#> Rtsne 0.16 2022-04-17 [2] CRAN (R 4.3.0)
#> S4Vectors * 0.37.0 2022-11-01 [2] Bioconductor
#> sass 0.4.2 2022-07-16 [2] CRAN (R 4.3.0)
#> scales 1.2.1 2022-08-20 [2] CRAN (R 4.3.0)
#> scatterpie 0.1.8 2022-09-03 [2] CRAN (R 4.3.0)
#> scGPS * 1.13.0 2022-11-01 [1] Bioconductor
#> sessioninfo 1.2.2 2021-12-06 [2] CRAN (R 4.3.0)
#> shadowtext 0.1.2 2022-04-22 [2] CRAN (R 4.3.0)
#> shape 1.4.6 2021-05-19 [2] CRAN (R 4.3.0)
#> shiny 1.7.3 2022-10-25 [2] CRAN (R 4.3.0)
#> SingleCellExperiment * 1.21.0 2022-11-01 [2] Bioconductor
#> stringi 1.7.8 2022-07-11 [2] CRAN (R 4.3.0)
#> stringr 1.4.1 2022-08-20 [2] CRAN (R 4.3.0)
#> SummarizedExperiment * 1.29.0 2022-11-01 [2] Bioconductor
#> survival 3.4-0 2022-08-09 [2] CRAN (R 4.3.0)
#> tibble 3.1.8 2022-07-22 [2] CRAN (R 4.3.0)
#> tidygraph 1.2.2 2022-08-22 [2] CRAN (R 4.3.0)
#> tidyr 1.2.1 2022-09-08 [2] CRAN (R 4.3.0)
#> tidyselect 1.2.0 2022-10-10 [2] CRAN (R 4.3.0)
#> tidytree 0.4.1 2022-09-26 [2] CRAN (R 4.3.0)
#> timeDate 4021.106 2022-09-30 [2] CRAN (R 4.3.0)
#> treeio 1.23.0 2022-11-01 [2] Bioconductor
#> tweenr 2.0.2 2022-09-06 [2] CRAN (R 4.3.0)
#> urlchecker 1.0.1 2021-11-30 [2] CRAN (R 4.3.0)
#> usethis 2.1.6 2022-05-25 [2] CRAN (R 4.3.0)
#> utf8 1.2.2 2021-07-24 [2] CRAN (R 4.3.0)
#> vctrs 0.5.0 2022-10-22 [2] CRAN (R 4.3.0)
#> viridis 0.6.2 2021-10-13 [2] CRAN (R 4.3.0)
#> viridisLite 0.4.1 2022-08-22 [2] CRAN (R 4.3.0)
#> withr 2.5.0 2022-03-03 [2] CRAN (R 4.3.0)
#> xfun 0.34 2022-10-18 [2] CRAN (R 4.3.0)
#> XML 3.99-0.12 2022-10-28 [2] CRAN (R 4.3.0)
#> xtable 1.8-4 2019-04-21 [2] CRAN (R 4.3.0)
#> XVector 0.39.0 2022-11-01 [2] Bioconductor
#> yaml 2.3.6 2022-10-18 [2] CRAN (R 4.3.0)
#> yulab.utils 0.0.5 2022-06-30 [2] CRAN (R 4.3.0)
#> zlibbioc 1.45.0 2022-11-01 [2] Bioconductor
#>
#> [1] /tmp/Rtmp6OkJNR/Rinst3419bb77f58eb3
#> [2] /home/biocbuild/bbs-3.17-bioc/R/library
#>
#> ──────────────────────────────────────────────────────────────────────────────