In this notebook, we'll perform differential gene expression tests using the DESeq2 package on our aggregated pseudobulk counts for each subject and cell type.
quiet_library <- function(...) {suppressPackageStartupMessages(library(...))}
quiet_library(DESeq2)
quiet_library(dplyr)
quiet_library(hise)
quiet_library(purrr)
quiet_library(furrr)
plan(multicore, workers = 12)
if(!dir.exists("output")) {
dir.create("output")
}
in_files <- c()
out_files <- c()
This function prepares data for analysis by setting factors, converting the matrix of data to a non-sparse, integer matrix, and assembling a DESeqDataSet with a given factor design.
prepare_deseq_data <- function(mat, meta, design) {
meta$cohort.cohortGuid <- factor(meta$cohort.cohortGuid, levels = c("BR1", "BR2"))
meta$subject.biologicalSex <- factor(meta$subject.biologicalSex, levels = c("Female", "Male"))
meta$subject.cmv <- factor(meta$subject.cmv, levels = c("Negative", "Positive"))
mat <- mat[,meta$barcodes]
mat <- as.matrix(mat)
mode(mat) <- "integer"
DESeqDataSetFromMatrix(
mat, colData = meta,
design = design
)
}
This function retrieves results from a DESeqDataSet after modeling and builds a data.frame with these results, cell types, and data grouping metadata.
format_deseq_results <- function(dds, cell_type, group_by, fg, bg) {
meta <- as.data.frame(colData(dds))
res <- results(dds, contrast = c(group_by, fg, bg))
res <- data.frame(res)
res <- res %>%
arrange(padj) %>%
mutate(direction = ifelse(log2FoldChange > 0,
paste0("HigherIn", fg),
paste0("HigherIn", bg))) %>%
mutate(gene = rownames(.),
cell_type = cell_type,
fg = fg, n_fg = sum(res[[group_by]] == fg),
bg = bg, n_bg = sum(res[[group_by]] == bg)) %>%
select(cell_type, fg, n_fg, bg, n_bg, gene, log2FoldChange, padj, direction,
baseMean, lfcSE, stat, pvalue)
res
}
Here, we'll identify differences in comparisons between cohorts, sexes, and CMV status across all subjects while controlling for the other two factors.
all_uuid <- "edf436fb-7063-4655-9055-6ad431fe7159"
res <- cacheFiles(list(all_uuid))
pb_file <- list.files(paste0("cache/", all_uuid), pattern = ".rds", full.names = TRUE)
pb_data <- readRDS(pb_file)
in_files = c(in_files, all_uuid)
To test for cohort differences, we'll specify the design of the differential expression tests using a function:
design = ~ cohort.cohortGuid + subject.biologicalSex + subject.cmv
dds_data <- map2(
pb_data$mats, pb_data$meta,
prepare_deseq_data,
design = ~ cohort.cohortGuid + subject.biologicalSex + subject.cmv
)
deseq_res <- future_map(
dds_data,
DESeq,
parallel = FALSE, # parallelization handled by future_map
quiet = TRUE,
.options = furrr_options(seed = 3030L)
)
-- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time.
cohort_res <- map2_dfr(
deseq_res, names(deseq_res),
format_deseq_results,
group_by = "cohort.cohortGuid",
fg = "BR1", bg = "BR2"
)
out_group <- "cohort"
out_csv <- paste0(
"output/diha_pbmc_", out_group, "_pseudobulk_deseq2_", Sys.Date(), ".csv"
)
write.csv(
cohort_res, out_csv,
quote = FALSE, row.names = FALSE
)
out_files <- c(out_files, out_csv)
To test for CMV differences, we'll specify the design of the differential expression tests using a function:
design = ~ subject.cmv + cohort.cohortGuid + subject.biologicalSex
dds_data <- map2(
pb_data$mats, pb_data$meta,
prepare_deseq_data,
design = ~ subject.cmv + cohort.cohortGuid + subject.biologicalSex
)
deseq_res <- future_map(
dds_data,
DESeq,
parallel = FALSE, # parallelization handled by future_map
quiet = TRUE,
.options = furrr_options(seed = 3030L)
)
-- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time.
cmv_res <- map2_dfr(
deseq_res, names(deseq_res),
format_deseq_results,
group_by = "subject.cmv",
fg = "Positive", bg = "Negative"
)
out_group <- "cmv"
out_csv <- paste0(
"output/diha_pbmc_", out_group, "_pseudobulk_deseq2_", Sys.Date(), ".csv"
)
write.csv(
cmv_res, out_csv,
quote = FALSE, row.names = FALSE
)
out_files <- c(out_files, out_csv)
To test for CMV differences, we'll specify the design of the differential expression tests using a function:
design = ~ subject.biologicalSex + cohort.cohortGuid + subject.cmv
dds_data <- map2(
pb_data$mats, pb_data$meta,
prepare_deseq_data,
design = ~ subject.biologicalSex + cohort.cohortGuid + subject.cmv
)
deseq_res <- future_map(
dds_data,
DESeq,
parallel = FALSE, # parallelization handled by future_map
quiet = TRUE,
.options = furrr_options(seed = 3030L)
)
-- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time.
sex_res <- map2_dfr(
deseq_res, names(deseq_res),
format_deseq_results,
group_by = "subject.biologicalSex",
fg = "Female", bg = "Male"
)
out_group <- "sex"
out_csv <- paste0(
"output/diha_pbmc_", out_group, "_pseudobulk_deseq2_", Sys.Date(), ".csv"
)
write.csv(
sex_res, out_csv,
quote = FALSE, row.names = FALSE
)
out_files <- c(out_files, out_csv)
Here, we'll identify differences between the cohorts within sex and CMV status.
To ensure gene selection was based on the data available within these groups, we previously generated pseudobulk datasets for the BR1 and BR2 cohorts, for CMV+ and CMV- subjects, and for Female and Male subjects separately.
Here, we're most interested in the effect of age - that is, comparisons between BR1 and BR2 - within the other two factors, CMV+ and CMV- or Male and Female.
We could perform every possible subsetting, but for now we'll stick with these 4 additional comparisons - BR1 vs BR2 within CMV+, within CMV-, within Female, and within Male subjects.
cmv_pos_uuid <- "c8e65e37-d11d-4baf-b450-6eda124ef102"
res <- cacheFiles(list(cmv_pos_uuid))
pb_file <- list.files(paste0("cache/", cmv_pos_uuid), pattern = ".rds", full.names = TRUE)
pb_data <- readRDS(pb_file)
in_files = c(in_files, cmv_pos_uuid)
Here, we're comparing cohort and controlling for sex within our CMV-positive subjects, so our design formula is:
~ cohort.cohortGuid + subject.biologicalSex
table(pb_data$meta[[2]]$subject.cmv)
Positive 37
ncol(pb_data$mats[[2]])
dds_data <- map2(
pb_data$mats, pb_data$meta,
prepare_deseq_data,
design = ~ cohort.cohortGuid + subject.biologicalSex
)
deseq_res <- future_map(
dds_data,
DESeq,
parallel = FALSE, # parallelization handled by future_map
quiet = TRUE,
.options = furrr_options(seed = 3030L)
)
-- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time.
cmvpos_cohort_res <- map2_dfr(
deseq_res, names(deseq_res),
format_deseq_results,
group_by = "cohort.cohortGuid",
fg = "BR1", bg = "BR2"
)
out_group <- "cmvpos_cohort"
out_csv <- paste0(
"output/diha_pbmc_", out_group, "_pseudobulk_deseq2_", Sys.Date(), ".csv"
)
write.csv(
cmvpos_cohort_res, out_csv,
quote = FALSE, row.names = FALSE
)
out_files <- c(out_files, out_csv)
cmv_neg_uuid <- "42de2197-4ce6-400e-a0e7-212f2b25e896"
res <- cacheFiles(list(cmv_neg_uuid))
pb_file <- list.files(paste0("cache/", cmv_neg_uuid), pattern = ".rds", full.names = TRUE)
pb_data <- readRDS(pb_file)
in_files <- c(in_files, cmv_neg_uuid)
Here, we're comparing cohort and controlling for sex within our CMV-negative subjects, so our design formula is:
~ cohort.cohortGuid + subject.biologicalSex
dds_data <- map2(
pb_data$mats, pb_data$meta,
prepare_deseq_data,
design = ~ cohort.cohortGuid + subject.biologicalSex
)
deseq_res <- future_map(
dds_data,
DESeq,
parallel = FALSE, # parallelization handled by future_map
quiet = TRUE,
.options = furrr_options(seed = 3030L)
)
-- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time.
cmvneg_cohort_res <- map2_dfr(
deseq_res, names(deseq_res),
format_deseq_results,
group_by = "cohort.cohortGuid",
fg = "BR1", bg = "BR2"
)
out_group <- "cmvneg_cohort"
out_csv <- paste0(
"output/diha_pbmc_", out_group, "_pseudobulk_deseq2_", Sys.Date(), ".csv"
)
write.csv(
cmvneg_cohort_res, out_csv,
quote = FALSE, row.names = FALSE
)
out_files <- c(out_files, out_csv)
female_uuid <- "56f09312-eb3f-40b7-b840-368d1ddbc22b"
res <- cacheFiles(list(female_uuid))
pb_file <- list.files(paste0("cache/", female_uuid), pattern = ".rds", full.names = TRUE)
pb_data <- readRDS(pb_file)
in_files = c(in_files, female_uuid)
Here, we're comparing cohort and controlling for CMV status within our Female subjects, so our design formula is:
~ cohort.cohortGuid + subject.cmv
dds_data <- map2(
pb_data$mats, pb_data$meta,
prepare_deseq_data,
design = ~ cohort.cohortGuid + subject.cmv
)
deseq_res <- future_map(
dds_data,
DESeq,
parallel = FALSE, # parallelization handled by future_map
quiet = TRUE,
.options = furrr_options(seed = 3030L)
)
-- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time.
female_cohort_res <- map2_dfr(
deseq_res, names(deseq_res),
format_deseq_results,
group_by = "cohort.cohortGuid",
fg = "BR1", bg = "BR2"
)
out_group <- "female_cohort"
out_csv <- paste0(
"output/diha_pbmc_", out_group, "_pseudobulk_deseq2_", Sys.Date(), ".csv"
)
write.csv(
female_cohort_res, out_csv,
quote = FALSE, row.names = FALSE
)
out_files <- c(out_files, out_csv)
male_uuid <- "4bf2bab1-b3c8-456b-aa90-566cd7b03577"
res <- cacheFiles(list(male_uuid))
pb_file <- list.files(paste0("cache/", male_uuid), pattern = ".rds", full.names = TRUE)
pb_data <- readRDS(pb_file)
in_files <- c(in_files, male_uuid)
Here, we're comparing cohort and controlling for CMV status within our Female subjects, so our design formula is:
~ cohort.cohortGuid + subject.cmv
dds_data <- map2(
pb_data$mats, pb_data$meta,
prepare_deseq_data,
design = ~ cohort.cohortGuid + subject.cmv
)
deseq_res <- future_map(
dds_data,
DESeq,
parallel = FALSE, # parallelization handled by future_map
quiet = TRUE,
.options = furrr_options(seed = 3030L)
)
-- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time. -- note: fitType='parametric', but the dispersion trend was not well captured by the function: y = a/x + b, and a local regression fit was automatically substituted. specify fitType='local' or 'mean' to avoid this message next time.
male_cohort_res <- map2_dfr(
deseq_res, names(deseq_res),
format_deseq_results,
group_by = "cohort.cohortGuid",
fg = "BR1", bg = "BR2"
)
out_group <- "male_cohort"
out_csv <- paste0(
"output/diha_pbmc_", out_group, "_pseudobulk_deseq2_", Sys.Date(), ".csv"
)
write.csv(
male_cohort_res, out_csv,
quote = FALSE, row.names = FALSE
)
out_files <- c(out_files, out_csv)
study_space_uuid <- "64097865-486d-43b3-8f94-74994e0a72e0"
title <- paste("PBMC Ref. Seurat Pseudobulk DESeq2 Res.", Sys.Date())
in_list <- as.list(in_files)
in_list
out_list <- as.list(out_files)
out_list
uploadFiles(
files = out_list,
studySpaceId = study_space_uuid,
title = title,
inputFileIds = in_list,
store = "project",
destination = "pseudobulk_deseq2",
doPrompt = FALSE
)
[1] "Cannot determine the current notebook." [1] "1) /home/jupyter/scRNA-Reference-IH-A/08-Differential_expression/36-R_pseudobulk_deseq2.ipynb" [1] "2) /home/jupyter/scRNA-Reference-IH-A/08-Differential_expression/36a-Python_pseudobulk_deseq2_vis_format.ipynb" [1] "3) /home/jupyter/scRNA-Reference-IH-A/07-Pseudobulk/35-R_pseudobulk_seurat.ipynb"
sessionInfo()
R version 4.3.2 (2023-10-31) Platform: x86_64-conda-linux-gnu (64-bit) Running under: Ubuntu 20.04.6 LTS Matrix products: default BLAS/LAPACK: /opt/conda/lib/libopenblasp-r0.3.25.so; LAPACK version 3.11.0 Random number generation: RNG: L'Ecuyer-CMRG Normal: Inversion Sample: Rejection locale: [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8 [4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8 [7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C [10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C time zone: Etc/UTC tzcode source: system (glibc) attached base packages: [1] stats4 stats graphics grDevices utils datasets methods [8] base other attached packages: [1] furrr_0.3.1 future_1.33.1 [3] purrr_1.0.2 hise_2.16.0 [5] dplyr_1.1.4 DESeq2_1.42.0 [7] SummarizedExperiment_1.32.0 Biobase_2.62.0 [9] MatrixGenerics_1.14.0 matrixStats_1.2.0 [11] GenomicRanges_1.54.1 GenomeInfoDb_1.38.5 [13] IRanges_2.36.0 S4Vectors_0.40.2 [15] BiocGenerics_0.48.1 loaded via a namespace (and not attached): [1] gtable_0.3.4 ggplot2_3.4.4 lattice_0.22-5 [4] vctrs_0.6.5 tools_4.3.2 bitops_1.0-7 [7] generics_0.1.3 curl_5.1.0 parallel_4.3.2 [10] tibble_3.2.1 fansi_1.0.6 pkgconfig_2.0.3 [13] Matrix_1.6-4 assertthat_0.2.1 uuid_1.2-0 [16] lifecycle_1.0.4 GenomeInfoDbData_1.2.11 stringr_1.5.1 [19] compiler_4.3.2 munsell_0.5.0 repr_1.1.6.9000 [22] codetools_0.2-19 htmltools_0.5.7 RCurl_1.98-1.14 [25] pillar_1.9.0 crayon_1.5.2 BiocParallel_1.36.0 [28] DelayedArray_0.28.0 abind_1.4-5 parallelly_1.36.0 [31] tidyselect_1.2.0 locfit_1.5-9.8 digest_0.6.34 [34] stringi_1.8.3 listenv_0.9.0 fastmap_1.1.1 [37] grid_4.3.2 colorspace_2.1-0 cli_3.6.2 [40] SparseArray_1.2.3 magrittr_2.0.3 S4Arrays_1.2.0 [43] base64enc_0.1-3 utf8_1.2.4 IRdisplay_1.1 [46] withr_3.0.0 scales_1.3.0 IRkernel_1.3.2 [49] httr_1.4.7 XVector_0.42.0 globals_0.16.2 [52] pbdZMQ_0.3-10 evaluate_0.23 rlang_1.1.3 [55] Rcpp_1.0.12 glue_1.7.0 jsonlite_1.8.8 [58] R6_2.5.1 zlibbioc_1.48.0