Loading R libraries
library(readxl)
library(TCGAbiolinks)
library(SummarizedExperiment)
library(dplyr) # for pipe operator ("%>%") https://r4ds.had.co.nz/pipes.html
library(MultiAssayExperiment) # Version 1.17.2, version 1.14.0 is not working
To install the most updated version of MultiAssayExperiment run the code below
ATAC-Seq data
Check available files
readr::read_tsv(
"https://gdc.cancer.gov/files/public/file/ATACseq-AWG_Open_GDC-Manifest.txt",
col_types = readr::cols() # just to hide columns type information
)
## # A tibble: 47 x 4
## id filename md5 size
## <chr> <chr> <chr> <dbl>
## 1 116ebba2-d284-485b… TCGA-ATAC_PanCancer_PeakSet.txt dbcaa696c62a99c… 3.75e7
## 2 148b8d1e-a132-48f6… TCGA-ATAC_DataS1_DonorsAndStats… f424a4aa2184de6… 2.52e5
## 3 165a6103-8d8b-4e1e… MESO_bigWigs.tgz acd81af5c7ddbbc… 1.51e9
## 4 17bdb321-45cf-4476… TCGA-ATAC_DataS5_GWAS_v2.xlsx 2a8196fbda1736d… 1.00e6
## 5 26b96cd9-dce0-4340… COAD_bigWigs.tgz ef6a3e7f1a86e19… 8.94e9
## 6 26f78bd9-45f3-4468… TCGA-ATAC_PanCan_Raw_Counts.txt f1270f619894cda… 1.24e9
## 7 2f27b5c3-73ce-4ddc… TGCT_bigWigs.tgz b31098961708e66… 2.06e9
## 8 340e5b6c-991f-42c2… TCGA-ATAC_DataS6_Footprinting_v… 62a823f620a4ddf… 1.95e7
## 9 3443e515-69b8-413d… TCGA-ATAC_DataS10_WGS-ATAC_v2_O… ed5836348d58b50… 8.93e5
## 10 38b8f311-f3a4-4746… TCGA-ATAC_Cancer_Type-specific_… c31893739baa05a… 6.33e8
## # … with 37 more rows
Get enhancer-to-gene link prediction
query.links <- GDCquery_ATAC_seq(file.type = "TCGA-ATAC_DataS7_PeakToGeneLinks_v2.xlsx")
GDCdownload(query.links, directory = "data")
links.file <- dir(path = "data",recursive = TRUE,pattern = "TCGA-ATAC_DataS7_PeakToGeneLinks_v2.xlsx",full.names = TRUE)
Sheet1: This page of the table shows the information for all peak-to-gene links identified in the pan-cancer analysis. These links have already been filtered to exclude (i) peaks that overlap gene promoters and (ii) “diffuse” regions of correlation (see methods).
Each row represents an individual enhancer-to-gene link predicted from the pan-cancer peak set. “Enhancers” are groups of nearby peaks that are predicted to regulate the same gene.
peak.to.gene.links <- readxl::read_xlsx(path = links.file,sheet = 1,skip = 30)
peak.to.gene.links.esca <- peak.to.gene.links %>% dplyr::filter(grepl("ESCA",peak.to.gene.links$Peak_Name))
head(peak.to.gene.links.esca)
## # A tibble: 6 x 22
## Chromosome Start End hg19_Chromosome hg19_Start hg19_End Peak_ID Peak_Name
## <chr> <dbl> <dbl> <chr> <dbl> <dbl> <dbl> <chr>
## 1 chr1 1.12e6 1.13e6 chr1 1060038 1060539 162 ESCA_61
## 2 chr1 1.13e6 1.13e6 chr1 1060539 1061040 163 ESCA_62
## 3 chr1 2.04e6 2.04e6 chr1 1974226 1974727 672 ESCA_357
## 4 chr1 2.07e6 2.07e6 chr1 2002911 2003412 709 ESCA_394
## 5 chr1 2.14e6 2.14e6 chr1 2069551 2070052 791 ESCA_476
## 6 chr1 2.14e6 2.14e6 chr1 2070112 2070613 792 ESCA_477
## # … with 14 more variables: Linked_Distance <dbl>, Linked_Gene <chr>,
## # Linked_Gene_Start <dbl>, Linked_Gene_Type <chr>, Raw_Correlation <dbl>,
## # Raw_FDR <dbl>, Nearest_Gene_Distance <dbl>, Nearest_Gene <chr>,
## # Peak_Type <chr>, Link_ID <dbl>, Correlation_Post_CNA <dbl>,
## # FDR_Post_CNA <dbl>, Enhancer_ID <chr>, Enhancer_Annotation <chr>
# transform to GenomicRanges object
peak.to.gene.links.gr <- peak.to.gene.links.esca %>% makeGRangesFromDataFrame(keep.extra.columns = TRUE)
peak.to.gene.links.gr
## GRanges object with 1924 ranges and 19 metadata columns:
## seqnames ranges strand | hg19_Chromosome hg19_Start
## <Rle> <IRanges> <Rle> | <character> <numeric>
## [1] chr1 1124658-1125159 * | chr1 1060038
## [2] chr1 1125159-1125660 * | chr1 1060539
## [3] chr1 2042787-2043288 * | chr1 1974226
## [4] chr1 2071472-2071973 * | chr1 2002911
## [5] chr1 2138112-2138613 * | chr1 2069551
## ... ... ... ... . ... ...
## [1920] chrX 48939680-48940181 * | chrX 48796951
## [1921] chrX 64395200-64395701 * | chrX 63615080
## [1922] chrX 64395200-64395701 * | chrX 63615080
## [1923] chrX 73214676-73215177 * | chrX 72434512
## [1924] chrX 151975162-151975663 * | chrX 151143634
## hg19_End Peak_ID Peak_Name Linked_Distance Linked_Gene
## <numeric> <numeric> <character> <numeric> <character>
## [1] 1060539 162 ESCA_61 -12108 LINC01342
## [2] 1061040 163 ESCA_62 -11607 LINC01342
## [3] 1974727 672 ESCA_357 -7432 PRKCZ
## [4] 2003412 709 ESCA_394 21253 PRKCZ
## [5] 2070052 791 ESCA_476 87893 PRKCZ
## ... ... ... ... ... ...
## [1920] 48797452 555003 ESCA_125378 -20907 PIM2
## [1921] 63615581 555788 ESCA_125581 -164820 ASB12
## [1922] 63615581 555788 ESCA_125581 -20 MTMR8
## [1923] 72435013 556640 ESCA_125804 -79 NAP1L2
## [1924] 151144135 562074 ESCA_126764 -733 GABRE
## Linked_Gene_Start Linked_Gene_Type Raw_Correlation Raw_FDR
## <numeric> <character> <numeric> <numeric>
## [1] 1137017 lincRNA 0.584188 2.30996e-04
## [2] 1137017 lincRNA 0.664443 1.65911e-05
## [3] 2050470 protein_coding 0.474441 5.13543e-03
## [4] 2050470 protein_coding 0.452793 8.69294e-03
## [5] 2050470 protein_coding 0.456184 8.02164e-03
## ... ... ... ... ...
## [1920] 48919024 protein_coding 0.516571 1.69199e-03
## [1921] 64230631 protein_coding 0.454598 8.32945e-03
## [1922] 64395431 protein_coding 0.576850 2.90199e-04
## [1923] 73214848 protein_coding 0.743925 1.06996e-06
## [1924] 151974680 protein_coding 0.638127 4.02876e-05
## Nearest_Gene_Distance Nearest_Gene Peak_Type Link_ID
## <numeric> <character> <character> <numeric>
## [1] -8546 C1orf159 Distal 46
## [2] -9047 C1orf159 Distal 47
## [3] 7032 RP11-547D24.3 Distal 95
## [4] 21253 PRKCZ Intron 96
## [5] 6916 RP5-892K4.1 Intron 97
## ... ... ... ... ...
## [1920] -59 LL0XNC01-36H8.1 Promoter NA
## [1921] -18 MTMR8 Promoter NA
## [1922] -18 MTMR8 Promoter NA
## [1923] -77 NAP1L2 Promoter NA
## [1924] -731 GABRE Promoter NA
## Correlation_Post_CNA FDR_Post_CNA Enhancer_ID Enhancer_Annotation
## <numeric> <numeric> <character> <character>
## [1] 0.584188 2.36278e-04 LINC01342_m2 Heterogeneous
## [2] 0.664443 1.67141e-05 LINC01342_m2 Heterogeneous
## [3] 0.474441 5.42716e-03 PRKCZ_m1 ClusterDriven
## [4] 0.452793 9.29392e-03 PRKCZ_p1 ClusterDriven
## [5] 0.456184 8.55339e-03 PRKCZ_p2 ClusterDriven
## ... ... ... ... ...
## [1920] 0.516571 1.76484e-03 <NA> <NA>
## [1921] 0.450673 9.79232e-03 <NA> <NA>
## [1922] 0.571171 3.54827e-04 <NA> <NA>
## [1923] 0.743925 1.06122e-06 <NA> <NA>
## [1924] 0.638127 4.07376e-05 <NA> <NA>
## -------
## seqinfo: 23 sequences from an unspecified genome; no seqlengths
Sheet 3: This page of the table shows the information related to merging of the nearby pan-cancer peak-to-gene links into larger enhancer units.
peak.to.gene.links.merged <- readxl::read_xlsx(path = links.file, sheet = 3, skip = 23)
peak.to.gene.links.merged.gr <- peak.to.gene.links.merged %>% makeGRangesFromDataFrame(keep.extra.columns = TRUE)
peak.to.gene.links.merged.gr
## GRanges object with 58092 ranges and 10 metadata columns:
## seqnames ranges strand | hg19_Chromosome hg19_Start
## <Rle> <IRanges> <Rle> | <character> <numeric>
## [1] chr17 35904163-35904664 * | chr17 34231167
## [2] chr19 58355274-58355775 * | chr19 58866640
## [3] chr19 58509928-58511544 * | chr19 59021295
## [4] chr19 58336164-58337261 * | chr19 58847530
## [5] chr19 58352295-58352796 * | chr19 58863661
## ... ... ... ... . ... ...
## [58088] chr1 45103501-45104002 * | chr1 45569173
## [58089] chr1 45204898-45206107 * | chr1 45670570
## [58090] chr17 15503104-15503605 * | chr17 15406418
## [58091] chr15 66670992-66671493 * | chr15 66963330
## [58092] chr1 52843282-52843783 * | chr1 53308954
## hg19_End Enhancer_ID Enhancer_Distance Linked_Gene Linked_Gene_Start
## <numeric> <character> <numeric> <character> <numeric>
## [1] 34231668 7SK_p1 14856 7SK 35889558
## [2] 58867141 A1BG_m1 -2026 A1BG 58353499
## [3] 59022911 A1BG_m2 -156680 A1BG 58353499
## [4] 58848627 A1BG_p1 16488 A1BG 58353499
## [5] 58864162 A1BG_p2 953 A1BG 58353499
## ... ... ... ... ... ...
## [58088] 45569674 ZSWIM5_p1 202457 ZSWIM5 45306209
## [58089] 45671779 ZSWIM5_p2 100352 ZSWIM5 45306209
## [58090] 15406919 ZSWIM7_p1 496362 ZSWIM7 15999717
## [58091] 66963831 ZWILCH_p1 166284 ZWILCH 66504959
## [58092] 53309455 ZYG11A_p1 1022 ZYG11A 52842511
## Summits Enhancer_Correlation Enhancer_FDR
## <character> <numeric> <numeric>
## [1] 35904414 0.466209 6.68042e-03
## [2] 58355525 0.458578 8.07043e-03
## [3] 58510179;58510682;58.. 0.658974 2.01470e-05
## [4] 58336415;58337011 0.706281 4.29984e-06
## [5] 58352546 0.533281 1.09831e-03
## ... ... ... ...
## [58088] 45103752 0.472919 5.64631e-03
## [58089] 45205149;45205857 0.615455 1.06192e-04
## [58090] 15503355 0.527528 1.29490e-03
## [58091] 66671243 0.553065 6.15780e-04
## [58092] 52843533 0.669143 1.42605e-05
## -------
## seqinfo: 23 sequences from an unspecified genome; no seqlengths
Get ESCA log2 norm counts and create a Summarized Experiment object
file <- "TCGA-ATAC_Cancer_Type-specific_Count_Matrices_log2norm_counts.zip"
query <- GDCquery_ATAC_seq(file.type = file)
GDCdownload(query,directory = "data") # 632 MB
zipfile <- dir(path = "data", recursive = TRUE, pattern = file, full.names = TRUE)
## Name Length Date
## 1 ACC_log2norm.txt 32638919 2018-09-13 14:17:00
## 2 BLCA_log2norm.txt 42768110 2018-09-13 14:17:00
## 3 BRCA_log2norm.txt 545044026 2018-09-13 14:18:00
## 4 CESC_log2norm.txt 9533539 2018-09-13 14:18:00
## 5 CHOL_log2norm.txt 15036030 2018-09-13 14:18:00
## 6 COAD_log2norm.txt 176995185 2018-09-13 14:18:00
## 7 ESCA_log2norm.txt 78072830 2018-09-13 14:18:00
## 8 GBM_log2norm.txt 27525009 2018-09-13 14:18:00
## 9 HNSC_log2norm.txt 30111019 2018-09-13 14:18:00
## 10 KIRC_log2norm.txt 56797520 2018-09-13 14:19:00
## 11 KIRP_log2norm.txt 169455430 2018-09-13 14:19:00
## 12 LGG_log2norm.txt 37244137 2018-09-13 14:19:00
## 13 LIHC_log2norm.txt 77559343 2018-09-13 14:19:00
## 14 LUAD_log2norm.txt 112606540 2018-09-13 14:19:00
## 15 LUSC_log2norm.txt 70292345 2018-09-13 14:19:00
## 16 MESO_log2norm.txt 21383986 2018-09-13 14:19:00
## 17 PCPG_log2norm.txt 31508947 2018-09-13 14:19:00
## 18 PRAD_log2norm.txt 105177572 2018-09-13 14:20:00
## 19 SKCM_log2norm.txt 47557119 2018-09-13 14:20:00
## 20 STAD_log2norm.txt 91832376 2018-09-13 14:20:00
## 21 TGCT_log2norm.txt 26620808 2018-09-13 14:20:00
## 22 THCA_log2norm.txt 49659622 2018-09-13 14:20:00
## 23 UCEC_log2norm.txt 48213655 2018-09-13 14:20:00
# Unzip file in the data folder
unzip(zipfile = zipfile, files = "ESCA_log2norm.txt",exdir = "data")
# read file
esca.peaks <- readr::read_tsv(
file = "data/ESCA_log2norm.txt",
col_types = readr::cols() # hide columns type inferred
)
# create Summarized Experiment object
esca.peaks.se <- esca.peaks %>%
dplyr::select(-c("score","name")) %>% # Remove columns score and name
makeSummarizedExperimentFromDataFrame()
rowRanges(esca.peaks.se)$score <- esca.peaks$score
rowRanges(esca.peaks.se)$name <- esca.peaks$name
# Map the ATAC-seq IDs ("ESCA_1E6AC686_96C2_46C...) to TCGA barcodes ("TCGA-IG-A51D-01A-31-A616-42")
gdc.file <- "https://api.gdc.cancer.gov/data/7a3d7067-09d6-4acf-82c8-a1a81febf72c"
samples.ids <- readr::read_tsv(gdc.file, col_types = readr::cols())
samples.ids$sample <- substr(samples.ids$Case_ID,1,16)
head(samples.ids)
## # A tibble: 6 x 6
## bam_prefix stanfordUUID aliquot_id Case_UUID Case_ID sample
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 BRCA-000CFD9F-AD… 000CFD9F-ADDF-… TCGA-A7-A13F… 2cf68894-16… TCGA-A7-… TCGA-A…
## 2 BRCA-000CFD9F-AD… 000CFD9F-ADDF-… TCGA-A7-A13F… 2cf68894-16… TCGA-A7-… TCGA-A…
## 3 PCPG-007124EC-1F… 007124EC-1F9B-… TCGA-RM-A68W… 1a1cf490-8b… TCGA-RM-… TCGA-R…
## 4 PCPG-007124EC-1F… 007124EC-1F9B-… TCGA-RM-A68W… 1a1cf490-8b… TCGA-RM-… TCGA-R…
## 5 STAD-00DFAA4D-DE… 00DFAA4D-DE64-… TCGA-BR-A4J1… e9a98a44-83… TCGA-BR-… TCGA-B…
## 6 STAD-00DFAA4D-DE… 00DFAA4D-DE64-… TCGA-BR-A4J1… e9a98a44-83… TCGA-BR-… TCGA-B…
colnames(esca.peaks.se) <- samples.ids$Case_ID[match(gsub("_","-",colnames(esca.peaks.se)),samples.ids$bam_prefix)]
# Since we have technical replicates we keep one of them
esca.peaks.se <- esca.peaks.se[,!duplicated(colnames(esca.peaks.se))]
## class: RangedSummarizedExperiment
## dim: 126935 18
## metadata(0):
## assays(1): ''
## rownames: NULL
## rowData names(2): score name
## colnames(18): TCGA-IG-A51D-01A-31-A616-42 TCGA-LN-A9FQ-01A-11-A617-42
## ... TCGA-IC-A6RE-01A-31-A616-42 TCGA-M9-A5M8-01A-31-A616-42
## colData names(0):
RNA-seq data
query.exp.hg38 <- GDCquery(
project = "TCGA-ESCA",
data.category = "Transcriptome Profiling",
data.type = "Gene Expression Quantification",
workflow.type = "HTSeq - FPKM-UQ",
sample.type = "Primary Tumor"
)
GDCdownload(query.exp.hg38, directory = "data") # 99 Mb
esca.rna <- GDCprepare(
query = query.exp.hg38,
directory = "data"
)
rownames(esca.rna) <- values(esca.rna)$external_gene_name
## class: RangedSummarizedExperiment
## dim: 56602 161
## metadata(1): data_release
## assays(1): HTSeq - FPKM-UQ
## rownames(56602): TSPAN6 TNMD ... LINC01144 AC007389.5
## rowData names(3): ensembl_gene_id external_gene_name
## original_ensembl_gene_id
## colnames(161): TCGA-L5-A4OM-01A-11R-A260-31
## TCGA-L5-A4OU-01A-11R-A28J-31 ... TCGA-JY-A93D-01A-11R-A38D-31
## TCGA-JY-A93E-01A-11R-A37I-31
## colData names(141): barcode patient ... paper_GEA-CIN Integrated
## Cluster - MKL-KNN-4 paper_GEA-CIN Integrated Cluster - MKL-KNN-7
Create a multiAssayExperiment object with all samples
Sample mapping table
# We need a table mapping each sample name (complete barcode - 28 characters)
# in both datasets (RNA, ATAC) to the same patient (first 16 characters)
sampleMap <- S4Vectors::DataFrame(
assay = factor(x = c(rep("RNA", ncol(esca.rna)),rep("ATAC", ncol(esca.peaks.se))),levels = c("RNA","ATAC")),
primary = c(colnames(esca.rna), colnames(esca.peaks.se)) %>% substr(1,16),
colname = c(colnames(esca.rna), colnames(esca.peaks.se))
)
sampleMap %>% as.data.frame %>% DT::datatable(options = list(scrollX = TRUE))
Samples metadata
## primary_diagnosis definition freq
## 1 Adenocarcinoma, NOS Primary solid Tumor 78
## 2 Basaloid squamous cell carcinoma Primary solid Tumor 1
## 3 Mucinous adenocarcinoma Primary solid Tumor 1
## 4 Squamous cell carcinoma, keratinizing, NOS Primary solid Tumor 4
## 5 Squamous cell carcinoma, NOS Primary solid Tumor 78
## 6 Tubular adenocarcinoma Primary solid Tumor 1
mae <- MultiAssayExperiment(
experiments = ExperimentList(list(RNA = esca.rna,ATAC = esca.peaks.se)),
colData = colData,
sampleMap = sampleMap,
metadata = list(),
drops = list()
)
mae
## A MultiAssayExperiment object of 2 listed
## experiments with user-defined names and respective classes.
## Containing an ExperimentList class object of length 2:
## [1] RNA: RangedSummarizedExperiment with 56602 rows and 161 columns
## [2] ATAC: RangedSummarizedExperiment with 126935 rows and 18 columns
## Functionality:
## experiments() - obtain the ExperimentList instance
## colData() - the primary/phenotype DataFrame
## sampleMap() - the sample coordination DataFrame
## `$`, `[`, `[[` - extract colData columns, subset, or experiment
## *Format() - convert into a long or wide DataFrame
## assays() - convert ExperimentList to a SimpleList of matrices
## exportClass() - save all data to files
Create a multiAssayExperiment object with matched samples
Sample mapping table
matched.samples <- intersect(colnames(esca.rna) %>% substr(1,16), colnames(esca.peaks.se) %>% substr(1,16))
# We need a table mapping each sample name (complete barcode - 28 characters)
# in both datasets (RNA, ATAC) to the same patient (first 16 characters)
sampleMap <- S4Vectors::DataFrame(
assay = factor(x = c(rep("RNA", ncol(esca.rna)),rep("ATAC", ncol(esca.peaks.se))),levels = c("RNA","ATAC")),
primary = c(colnames(esca.rna), colnames(esca.peaks.se)) %>% substr(1,16),
colname = c(colnames(esca.rna), colnames(esca.peaks.se))
)
sampleMap %>% as.data.frame %>% DT::datatable(options = list(scrollX = TRUE))
Samples metadata
## primary_diagnosis definition freq
## 1 Adenocarcinoma, NOS Primary solid Tumor 6
## 2 Squamous cell carcinoma, NOS Primary solid Tumor 10
mae.matched <- MultiAssayExperiment(
experiments = ExperimentList(list(
RNA = esca.rna[,match(matched.samples, colnames(esca.rna) %>% substr(1,16))],
ATAC = esca.peaks.se[,match(matched.samples, colnames(esca.peaks.se) %>% substr(1,16))]
)
),
colData = colData,
sampleMap = sampleMap,
metadata = list(),
drops = list()
)
## harmonizing input:
## removing 147 sampleMap rows with 'colname' not in colnames of experiments
## A MultiAssayExperiment object of 2 listed
## experiments with user-defined names and respective classes.
## Containing an ExperimentList class object of length 2:
## [1] RNA: RangedSummarizedExperiment with 56602 rows and 16 columns
## [2] ATAC: RangedSummarizedExperiment with 126935 rows and 16 columns
## Functionality:
## experiments() - obtain the ExperimentList instance
## colData() - the primary/phenotype DataFrame
## sampleMap() - the sample coordination DataFrame
## `$`, `[`, `[[` - extract colData columns, subset, or experiment
## *Format() - convert into a long or wide DataFrame
## assays() - convert ExperimentList to a SimpleList of matrices
## exportClass() - save all data to files
# check samples are in the same order
assay(mae.matched,"RNA") %>% colnames() %>% substr(1,16) == assay(mae.matched,"ATAC") %>% colnames() %>% substr(1,16)
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [16] TRUE
Plot ATAC-seq and RNA-seq for linked enhancers-genes
Find enhancer overlapping ATAC-seq peaks
# we don't have RNA expression for all genes, let's remove them first
peak.to.gene.links.merged.gr <- peak.to.gene.links.merged.gr[peak.to.gene.links.merged.gr$Linked_Gene %in% rownames(assay(mae.matched,"RNA"))]
hits.enhancer.atac.peaks <- findOverlaps(peak.to.gene.links.merged.gr,mae.matched[["ATAC"]])
Selecting mapped links
Heatmap plot
## Loading required package: grid
## ========================================
## ComplexHeatmap version 2.4.3
## Bioconductor page: http://bioconductor.org/packages/ComplexHeatmap/
## Github page: https://github.com/jokergoo/ComplexHeatmap
## Documentation: http://jokergoo.github.io/ComplexHeatmap-reference
##
## If you use it in published research, please cite:
## Gu, Z. Complex heatmaps reveal patterns and correlations in multidimensional
## genomic data. Bioinformatics 2016.
##
## This message can be suppressed by:
## suppressPackageStartupMessages(library(ComplexHeatmap))
## ========================================
## ========================================
## circlize version 0.4.11
## CRAN page: https://cran.r-project.org/package=circlize
## Github page: https://github.com/jokergoo/circlize
## Documentation: https://jokergoo.github.io/circlize_book/book/
##
## If you use it in published research, please cite:
## Gu, Z. circlize implements and enhances circular visualization
## in R. Bioinformatics 2014.
##
## This message can be suppressed by:
## suppressPackageStartupMessages(library(circlize))
## ========================================
Heatmap ATAC-seq
# colors of the atac-seq data
pal_atac <- colorRampPalette(
c(
'#3361A5', '#248AF3', '#14B3FF',
'#88CEEF', '#C1D5DC', '#EAD397',
'#FDB31A','#E42A2A', '#A31D1D'
)
)(100)
# Samples annotation
ha = HeatmapAnnotation(
df = data.frame("Group" = mae.matched$primary_diagnosis),
show_annotation_name = TRUE,
col = list(
Group = c(
"Squamous cell carcinoma, NOS" = "red",
"Adenocarcinoma, NOS" = "blue"
)
),
show_legend = TRUE,
annotation_name_side = "left",
annotation_name_gp = gpar(fontsize = 6)
)
# row z-score
# the scale function is applied over columns so we need to transpose the data
atac.mat.row.z.score <- atac.mat %>% t %>% scale %>% t
col.zscore <- colorRamp2(seq(-2, 2, by = 4/99), pal_atac)
# rows.annot <- rowAnnotation(foo = anno_mark(at = c(1,18), labels = rownames(plot.atac)[c(1,18)]))
ht_atac <- Heatmap(
matrix = atac.mat.row.z.score[1:1000,],
name ="ATAC-seq log2(counts)\nz-score rowwise",
col = col.zscore,
heatmap_legend_param = list(
legend_width = unit(3, "cm"),
legend_direction = "horizontal",
labels_gp = gpar(fontsize = 12),
title_gp = gpar(fontsize = 12)
),
show_column_names = FALSE,
cluster_columns = TRUE,
show_row_names = FALSE,
cluster_rows = TRUE, # cluster will be based on ATAC-seq
row_title = " ATAC-seq peaks",
top_annotation = ha,
column_names_gp = gpar(fontsize = 8),
row_names_gp = gpar(fontsize = 4),
column_title_gp = gpar(fontsize = 12),
row_title_gp = gpar(fontsize = 12),
use_raster = TRUE,
raster_device = c("png"),
raster_quality = 2
)
Heatmap RNA-seq
# colors of the RNA-seq data
pal_rna <- colorRampPalette(
c(
"#352A86","#343DAE","#0262E0","#1389D2",
"#2DB7A3","#A5BE6A","#F8BA43","#F6DA23","#F8FA0D"
)
)(100)
# row z-score
# the scale function is applied over columns so we need to transpose the data
exp.mat.row.z.score <- exp.mat %>% t %>% scale %>% t
col.zscore <- colorRamp2(seq(-2, 2, by = 4/99), pal_rna)
# Samples annotation
ha = HeatmapAnnotation(
df = data.frame("Group" = mae.matched$primary_diagnosis),
show_annotation_name = FALSE,
col = list(
Group = c(
"Squamous cell carcinoma, NOS" = "red",
"Adenocarcinoma, NOS" = "blue"
)
),
show_legend = TRUE,
annotation_name_side = "right",
annotation_name_gp = gpar(fontsize = 6)
)
# rows.annot <- rowAnnotation(foo = anno_mark(at = c(1,18), labels = rownames(plot.atac)[c(1,18)]))
ht_exp <- Heatmap(
matrix = exp.mat.row.z.score[1:1000,],
name ="RNA-seq FPKM-UQ\nz-score rowwise",
col = col.zscore,
column_names_gp = gpar(fontsize = 8),
show_column_names = F,
heatmap_legend_param = list(
legend_width = unit(3, "cm"),
legend_direction = "horizontal",
labels_gp = gpar(fontsize = 12),
title_gp = gpar(fontsize = 12)
),
show_row_names = FALSE,
cluster_columns = FALSE,
use_raster = TRUE,
raster_device = c("png"),
raster_quality = 2,
cluster_rows = FALSE,
row_title = "RNA-seq linked genes",
row_title_side = "right",
column_order = column_order(ht_atac),
row_names_gp = gpar(fontsize = 4),
top_annotation = ha,
#width = unit(15, "cm"),
column_title_gp = gpar(fontsize = 12),
row_title_gp = gpar(fontsize = 12)
)
Complete R code
#-------------------------------------------------------------------------------
# Libraries
#-------------------------------------------------------------------------------
library(readxl)
library(TCGAbiolinks)
library(SummarizedExperiment)
library(dplyr) # for pipe operator ("%>%") https://r4ds.had.co.nz/pipes.html
library(MultiAssayExperiment) # Version 1.17.2, version 1.14.0 is not working
# To install the most updated version of MultiAssayExperiment run the code below
# BiocManager::install("waldronlab/MultiAssayExperiment")
#-------------------------------------------------------------------------------
# o ATAC-Seq data
# Available files
# https://gdc.cancer.gov/files/public/file/ATACseq-AWG_Open_GDC-Manifest.txt
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# oo Get enhancer-to-gene link prediction
#-------------------------------------------------------------------------------
query.links <- GDCquery_ATAC_seq(file.type = "TCGA-ATAC_DataS7_PeakToGeneLinks_v2.xlsx")
GDCdownload(query.links,directory = "data")
links.file <- dir(path = "data",recursive = TRUE,pattern = "TCGA-ATAC_DataS7_PeakToGeneLinks_v2.xlsx",full.names = TRUE)
# Sheet1: This page of the table shows the information for all peak-to-gene
# links identified in the pan-cancer analysis. These links have already been
# filtered to exclude (i) peaks that overlap gene promoters and
# (ii) "diffuse" regions of correlation (see methods).
# Each row represents an individual enhancer-to-gene link predicted from the
# pan-cancer peak set. "Enhancers" are groups of nearby peaks
# that are predicted to regulate the same gene. See methods.
peak.to.gene.links <- readxl::read_xlsx(path = links.file,sheet = 1,skip = 30)
peak.to.gene.links.esca <- peak.to.gene.links %>% dplyr::filter(grepl("ESCA",peak.to.gene.links$Peak_Name))
head(peak.to.gene.links.esca)
peak.to.gene.links.gr <- peak.to.gene.links.esca %>% makeGRangesFromDataFrame(keep.extra.columns = TRUE)
peak.to.gene.links.gr
# Sheet 3:
# This page of the table shows the information related to merging of the nearby
# pan-cancer peak-to-gene links into larger enhancer units (see methods).
peak.to.gene.links.merged <- readxl::read_xlsx(path = links.file, sheet = 3, skip = 23)
peak.to.gene.links.merged.gr <- peak.to.gene.links.merged %>% makeGRangesFromDataFrame(keep.extra.columns = TRUE)
peak.to.gene.links.merged.gr
#-------------------------------------------------------------------------------
# oo Get ESCA log2 norm counts and create a Summarized Experiment object
#-------------------------------------------------------------------------------
file <- "TCGA-ATAC_Cancer_Type-specific_Count_Matrices_log2norm_counts.zip"
query <- GDCquery_ATAC_seq(file.type = file)
GDCdownload(query,directory = "data") # 632 MB
zipfile <- dir(path = "data", recursive = TRUE, pattern = file, full.names = TRUE)
# which files are available ?
unzip(zipfile = zipfile,list = TRUE)
# Unzip file in the data folder
unzip(zipfile = zipfile, files = "ESCA_log2norm.txt",exdir = "data")
# read file
esca.peaks <- readr::read_tsv("data/ESCA_log2norm.txt")
# create Summarized Experiment object
esca.peaks.se <- esca.peaks %>%
dplyr::select(-c("score","name")) %>% # Remove columns score and name
makeSummarizedExperimentFromDataFrame()
rowRanges(esca.peaks.se)$score <- esca.peaks$score
rowRanges(esca.peaks.se)$name <- esca.peaks$name
# Map the ATAC-seq IDs ("ESCA_1E6AC686_96C2_46C...) to TCGA barcodes ("TCGA-IG-A51D-01A-31-A616-42")
gdc.file <- "https://api.gdc.cancer.gov/data/7a3d7067-09d6-4acf-82c8-a1a81febf72c"
samples.ids <- readr::read_tsv(gdc.file, col_types = readr::cols())
samples.ids$sample <- substr(samples.ids$Case_ID,1,16)
head(samples.ids)
colnames(esca.peaks.se) <- samples.ids$Case_ID[match(gsub("_","-",colnames(esca.peaks.se)),samples.ids$bam_prefix)]
# Since we have technical replicates we keep one of them
esca.peaks.se <- esca.peaks.se[,!duplicated(colnames(esca.peaks.se))]
#-------------------------------------------------------------------------------
# o RNA-seq data
#-------------------------------------------------------------------------------
query.exp.hg38 <- GDCquery(
project = "TCGA-ESCA",
data.category = "Transcriptome Profiling",
data.type = "Gene Expression Quantification",
workflow.type = "HTSeq - FPKM-UQ",
sample.type = "Primary Tumor"
)
GDCdownload(query.exp.hg38, directory = "data") # 99 Mb
esca.rna <- GDCprepare(
query = query.exp.hg38,
directory = "data"
)
#-------------------------------------------------------------------------------
# o Create a multiAssayExperiment object with all samples
#-------------------------------------------------------------------------------
# We need a table mapping each sample name (complete barcode - 28 characters)
# in both datasets (RNA, ATAC) to the same patient (first 16 characters)
sampleMap <- S4Vectors::DataFrame(
assay = factor(x = c(rep("RNA", ncol(esca.rna)),rep("ATAC", ncol(esca.peaks.se))),levels = c("RNA","ATAC")),
primary = c(colnames(esca.rna), colnames(esca.peaks.se)) %>% substr(1,16),
colname = c(colnames(esca.rna), colnames(esca.peaks.se))
)
sampleMap
colData <- sampleMap$primary %>% unique %>% TCGAbiolinks:::colDataPrepare()
head(colData)
plyr::count(colData, c("primary_diagnosis","definition"))
mae <- MultiAssayExperiment(
experiments = ExperimentList(list(RNA = esca.rna,ATAC = esca.peaks.se)),
colData = colData,
sampleMap = sampleMap,
metadata = list(),
drops = list()
)
#-------------------------------------------------------------------------------
# o Create a multiAssayExperiment object with matched samples
#-------------------------------------------------------------------------------
# We need a table mapping each sample name (complete barcode - 28 characters)
# in both datasets (RNA, ATAC) to the same patient (first 16 characters)
matched.samples <- intersect(colnames(esca.rna) %>% substr(1,16), colnames(esca.peaks.se) %>% substr(1,16))
# We need a table mapping each sample name (complete barcode - 28 characters)
# in both datasets (RNA, ATAC) to the same patient (first 16 characters)
sampleMap <- S4Vectors::DataFrame(
assay = factor(x = c(rep("RNA", ncol(esca.rna)),rep("ATAC", ncol(esca.peaks.se))),levels = c("RNA","ATAC")),
primary = c(colnames(esca.rna), colnames(esca.peaks.se)) %>% substr(1,16),
colname = c(colnames(esca.rna), colnames(esca.peaks.se))
)
colData <- matched.samples %>% unique %>% TCGAbiolinks:::colDataPrepare()
head(colData)
plyr::count(colData, c("primary_diagnosis","definition"))
plyr::count(colData, c("primary_diagnosis","definition"))
mae.matched <- MultiAssayExperiment(
experiments = ExperimentList(list(
RNA = esca.rna[,match(matched.samples, colnames(esca.rna) %>% substr(1,16))],
ATAC = esca.peaks.se[,match(matched.samples, colnames(esca.peaks.se) %>% substr(1,16))]
)
),
colData = colData,
sampleMap = sampleMap,
metadata = list(),
drops = list()
)
mae.matched
# check samples are in the same order
assay(mae.matched,"RNA") %>% colnames() %>% substr(1,16) == assay(mae.matched,"ATAC") %>% colnames() %>% substr(1,16)
#-------------------------------------------------------------------------------
# o Plot ATAC-seq and RNA-seq for linked enhancers-genes
#-------------------------------------------------------------------------------
# we don't have RNA expression for all genes, let's remove them first
peak.to.gene.links.merged.gr <- peak.to.gene.links.merged.gr[peak.to.gene.links.merged.gr$Linked_Gene %in% rownames(assay(mae.matched,"RNA"))]
hits.enhancer.atac.peaks <- findOverlaps(peak.to.gene.links.merged.gr,mae.matched[["ATAC"]])
genes <- peak.to.gene.links.merged.gr$Linked_Gene[queryHits(hits.enhancer.atac.peaks)]
exp.mat <- assay(mae.matched,"RNA")[genes,]
atac.mat <- assay(mae.matched,"ATAC")[subjectHits(hits.enhancer.atac.peaks),]
library(ComplexHeatmap)
library(circlize)
### Heatmap ATAC-seq
# colors of the atac-seq data
pal_atac <- colorRampPalette(
c(
'#3361A5', '#248AF3', '#14B3FF',
'#88CEEF', '#C1D5DC', '#EAD397',
'#FDB31A','#E42A2A', '#A31D1D'
)
)(100)
# Samples annotation
ha = HeatmapAnnotation(
df = data.frame("Group" = mae.matched$primary_diagnosis),
show_annotation_name = TRUE,
col = list(
Group = c(
"Squamous cell carcinoma, NOS" = "red",
"Adenocarcinoma, NOS" = "blue"
)
),
show_legend = TRUE,
annotation_name_side = "left",
annotation_name_gp = gpar(fontsize = 6)
)
# row z-score
# the scale function is applied over columns so we need to transpose the data
atac.mat.row.z.score <- atac.mat %>% t %>% scale %>% t
col.zscore <- colorRamp2(seq(-2, 2, by = 4/99), pal_atac)
# rows.annot <- rowAnnotation(foo = anno_mark(at = c(1,18), labels = rownames(plot.atac)[c(1,18)]))
ht_atac <- Heatmap(
matrix = atac.mat.row.z.score[1:1000,],
name ="ATAC-seq log2(counts)\nz-score rowwise",
col = col.zscore,
heatmap_legend_param = list(
legend_width = unit(3, "cm"),
legend_direction = "horizontal",
labels_gp = gpar(fontsize = 12),
title_gp = gpar(fontsize = 12)
),
show_column_names = FALSE,
cluster_columns = TRUE,
show_row_names = FALSE,
cluster_rows = TRUE, # cluster will be based on ATAC-seq
row_title = " ATAC-seq peaks",
top_annotation = ha,
column_names_gp = gpar(fontsize = 8),
row_names_gp = gpar(fontsize = 4),
column_title_gp = gpar(fontsize = 12),
row_title_gp = gpar(fontsize = 12),
use_raster = TRUE,
raster_device = c("png"),
raster_quality = 2
)
### Heatmap RNA-seq
# colors of the RNA-seq data
pal_rna <- colorRampPalette(
c(
"#352A86","#343DAE","#0262E0","#1389D2",
"#2DB7A3","#A5BE6A","#F8BA43","#F6DA23","#F8FA0D"
)
)(100)
# row z-score
# the scale function is applied over columns so we need to transpose the data
exp.mat.row.z.score <- exp.mat %>% t %>% scale %>% t
col.zscore <- colorRamp2(seq(-2, 2, by = 4/99), pal_rna)
# Samples annotation
ha = HeatmapAnnotation(
df = data.frame("Group" = mae.matched$primary_diagnosis),
show_annotation_name = FALSE,
col = list(
Group = c(
"Squamous cell carcinoma, NOS" = "red",
"Adenocarcinoma, NOS" = "blue"
)
),
show_legend = TRUE,
annotation_name_side = "right",
annotation_name_gp = gpar(fontsize = 6)
)
# rows.annot <- rowAnnotation(foo = anno_mark(at = c(1,18), labels = rownames(plot.atac)[c(1,18)]))
ht_exp <- Heatmap(
matrix = exp.mat.row.z.score[1:1000,],
name ="RNA-seq FPKM-UQ\nz-score rowwise",
col = col.zscore,
column_names_gp = gpar(fontsize = 8),
show_column_names = F,
heatmap_legend_param = list(
legend_width = unit(3, "cm"),
legend_direction = "horizontal",
labels_gp = gpar(fontsize = 12),
title_gp = gpar(fontsize = 12)
),
show_row_names = FALSE,
cluster_columns = FALSE,
use_raster = TRUE,
raster_device = c("png"),
raster_quality = 2,
cluster_rows = FALSE,
row_title = "RNA-seq linked genes",
row_title_side = "right",
column_order = column_order(ht_atac),
row_names_gp = gpar(fontsize = 4),
top_annotation = ha,
#width = unit(15, "cm"),
column_title_gp = gpar(fontsize = 12),
row_title_gp = gpar(fontsize = 12)
)
### Draw Heatmap
draw(
object = ht_atac + ht_exp,
newpage = TRUE,
merge_legends = TRUE,
column_title_gp = gpar(fontsize = 12, fontface = "bold"),
heatmap_legend_side = "bottom",
annotation_legend_side = "bottom"
)
Session information
## ─ Session info ───────────────────────────────────────────────────────────────
## setting value
## version R version 4.0.3 (2020-10-10)
## os Ubuntu 20.04.1 LTS
## system x86_64, linux-gnu
## ui X11
## language (EN)
## collate en_US.UTF-8
## ctype en_US.UTF-8
## tz America/New_York
## date 2020-12-08
##
## ─ Packages ───────────────────────────────────────────────────────────────────
## package * version date lib
## AnnotationDbi 1.52.0 2020-10-27 [2]
## askpass 1.1 2019-01-13 [3]
## assertthat 0.2.1 2019-03-21 [3]
## Biobase * 2.50.0 2020-10-27 [2]
## BiocFileCache 1.14.0 2020-10-27 [2]
## BiocGenerics * 0.36.0 2020-10-27 [2]
## biomaRt 2.46.0 2020-10-27 [2]
## bit 4.0.4 2020-08-04 [3]
## bit64 4.0.5 2020-08-30 [1]
## bitops 1.0-6 2013-08-17 [3]
## blob 1.2.1 2020-01-20 [3]
## bookdown 0.21 2020-10-13 [3]
## callr 3.5.1 2020-10-13 [1]
## cellranger 1.1.0 2016-07-27 [3]
## circlize * 0.4.11 2020-10-31 [3]
## cli 2.1.0 2020-10-12 [1]
## clue 0.3-57 2019-02-25 [3]
## cluster 2.1.0 2019-06-19 [4]
## colorspace 2.0-0 2020-11-11 [1]
## ComplexHeatmap * 2.4.3 2020-07-25 [2]
## crayon 1.3.4 2017-09-16 [3]
## crosstalk 1.1.0.1 2020-03-13 [3]
## curl 4.3 2019-12-02 [3]
## data.table 1.13.2 2020-10-19 [1]
## DBI 1.1.0 2019-12-15 [3]
## dbplyr 2.0.0 2020-11-03 [1]
## DelayedArray 0.16.0 2020-10-27 [2]
## desc 1.2.0 2018-05-01 [3]
## devtools 2.3.2 2020-09-18 [3]
## digest 0.6.27 2020-10-24 [1]
## downloader 0.4 2015-07-09 [3]
## dplyr * 1.0.2 2020-08-18 [3]
## DT 0.16 2020-10-13 [1]
## ellipsis 0.3.1 2020-05-15 [3]
## evaluate 0.14 2019-05-28 [3]
## fansi 0.4.1 2020-01-08 [3]
## fs 1.5.0 2020-07-31 [3]
## generics 0.1.0 2020-10-31 [1]
## GenomeInfoDb * 1.26.1 2020-11-20 [2]
## GenomeInfoDbData 1.2.4 2020-10-30 [2]
## GenomicRanges * 1.42.0 2020-10-27 [2]
## GetoptLong 1.0.4 2020-10-19 [3]
## ggplot2 3.3.2 2020-06-19 [1]
## GlobalOptions 0.1.2 2020-06-10 [3]
## glue 1.4.2 2020-08-27 [1]
## gtable 0.3.0 2019-03-25 [3]
## hms 0.5.3 2020-01-08 [3]
## htmltools 0.5.0 2020-06-16 [3]
## htmlwidgets 1.5.2 2020-10-03 [1]
## httr 1.4.2 2020-07-20 [3]
## IRanges * 2.24.0 2020-10-27 [2]
## jsonlite 1.7.1 2020-09-07 [3]
## knitr 1.30 2020-09-22 [3]
## lattice 0.20-41 2020-04-02 [4]
## lifecycle 0.2.0 2020-03-06 [3]
## magrittr 2.0.1 2020-11-17 [3]
## Matrix 1.2-18 2019-11-27 [4]
## MatrixGenerics * 1.2.0 2020-10-27 [2]
## matrixStats * 0.57.0 2020-09-25 [1]
## memoise 1.1.0 2017-04-21 [3]
## MultiAssayExperiment * 1.17.2 2020-12-08 [2]
## munsell 0.5.0 2018-06-12 [3]
## openssl 1.4.3 2020-09-18 [3]
## pillar 1.4.7 2020-11-20 [3]
## pkgbuild 1.1.0 2020-07-13 [3]
## pkgconfig 2.0.3 2019-09-22 [3]
## pkgload 1.1.0 2020-05-29 [3]
## plyr 1.8.6 2020-03-03 [3]
## png 0.1-7 2013-12-03 [3]
## prettyunits 1.1.1 2020-01-24 [3]
## processx 3.4.4 2020-09-03 [1]
## progress 1.2.2 2019-05-16 [3]
## ps 1.4.0 2020-10-07 [3]
## purrr 0.3.4 2020-04-17 [3]
## R.methodsS3 1.8.1 2020-08-26 [3]
## R.oo 1.24.0 2020-08-26 [3]
## R.utils 2.10.1 2020-08-26 [3]
## R6 2.5.0 2020-10-28 [2]
## rappdirs 0.3.1 2016-03-28 [3]
## RColorBrewer 1.1-2 2014-12-07 [3]
## Rcpp 1.0.5 2020-07-06 [3]
## RCurl 1.98-1.2 2020-04-18 [3]
## readr 1.4.0 2020-10-05 [1]
## readxl * 1.3.1 2019-03-13 [3]
## remotes 2.2.0 2020-07-21 [3]
## rjson 0.2.20 2018-06-08 [3]
## rlang 0.4.9 2020-11-26 [3]
## rmarkdown 2.5 2020-10-21 [3]
## rmdformats 1.0.1 2020-12-08 [2]
## rprojroot 2.0.2 2020-11-15 [3]
## RSQLite 2.2.1 2020-09-30 [1]
## rstudioapi 0.12 2020-11-10 [1]
## rvest 0.3.6 2020-07-25 [3]
## S4Vectors * 0.28.0 2020-10-27 [2]
## scales 1.1.1 2020-05-11 [3]
## sessioninfo 1.1.1 2018-11-05 [3]
## shape 1.4.5 2020-09-13 [3]
## stringi 1.5.3 2020-09-09 [3]
## stringr 1.4.0 2019-02-10 [3]
## SummarizedExperiment * 1.20.0 2020-10-27 [1]
## TCGAbiolinks * 2.19.0 2020-11-12 [1]
## TCGAbiolinksGUI.data 1.9.2 2020-10-30 [2]
## testthat 3.0.0 2020-10-31 [1]
## tibble 3.0.4 2020-10-12 [1]
## tidyr 1.1.2 2020-08-27 [1]
## tidyselect 1.1.0 2020-05-11 [3]
## usethis 1.6.3 2020-09-17 [3]
## utf8 1.1.4 2018-05-24 [3]
## vctrs 0.3.4 2020-08-29 [1]
## withr 2.3.0 2020-09-22 [3]
## xfun 0.19 2020-10-30 [1]
## XML 3.99-0.5 2020-07-23 [3]
## xml2 1.3.2 2020-04-23 [3]
## XVector 0.30.0 2020-10-27 [2]
## yaml 2.2.1 2020-02-01 [3]
## zlibbioc 1.36.0 2020-10-27 [2]
## source
## Bioconductor
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## Bioconductor
## Bioconductor
## Bioconductor
## Bioconductor
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.3)
## CRAN (R 4.0.3)
## CRAN (R 4.0.2)
## CRAN (R 4.0.3)
## CRAN (R 4.0.3)
## CRAN (R 4.0.2)
## CRAN (R 4.0.0)
## CRAN (R 4.0.3)
## Bioconductor
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.3)
## CRAN (R 4.0.2)
## CRAN (R 4.0.3)
## Bioconductor
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.3)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.3)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.3)
## Bioconductor
## Bioconductor
## Bioconductor
## CRAN (R 4.0.3)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## Bioconductor
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.0)
## CRAN (R 4.0.2)
## CRAN (R 4.0.3)
## CRAN (R 4.0.0)
## Bioconductor
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## Github (waldronlab/MultiAssayExperiment@e7cb3c4)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.3)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.3)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.3)
## CRAN (R 4.0.3)
## Github (juba/rmdformats@72fb1df)
## CRAN (R 4.0.3)
## CRAN (R 4.0.2)
## CRAN (R 4.0.3)
## CRAN (R 4.0.2)
## Bioconductor
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## Bioconductor
## Bioconductor
## Github (BioinformaticsFMRP/TCGAbiolinksGUI.data@928bc18)
## CRAN (R 4.0.3)
## CRAN (R 4.0.3)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## CRAN (R 4.0.3)
## CRAN (R 4.0.2)
## CRAN (R 4.0.2)
## Bioconductor
## CRAN (R 4.0.2)
## Bioconductor
##
## [1] /home/tiagochst/R/x86_64-pc-linux-gnu-library/4.0
## [2] /usr/local/lib/R/site-library
## [3] /usr/lib/R/site-library
## [4] /usr/lib/R/library