# 1R

## 1.1 Vectors

‘atomic’ vectors

• logical(), integer(), numeric(), character(), …

x <- c(1, 3, 5)
y <- 1:5
• Interface: length(), [, [<-

lists

• Interface: length(), [, [<-, [[, [[<-, $, $<-

Trouble!

• NA

x <- c(TRUE, FALSE, NA)
outer(x, x, &)
##       [,1]  [,2]  [,3]
## [1,]  TRUE FALSE    NA
## [2,] FALSE FALSE FALSE
## [3,]    NA FALSE    NA
outer(x, x, |)
##      [,1]  [,2] [,3]
## [1,] TRUE  TRUE TRUE
## [2,] TRUE FALSE   NA
## [3,] TRUE    NA   NA
• Factors

x <- c("Male", "Female", "male")
gender <- factor(x, levels=c("Female", "Male"))
gender
## [1] Male   Female <NA>
## Levels: Female Male

## 1.2 Objects

The data.frame

x <- rnorm(100)
hist(x)

y <- x + rnorm(100)
df <- data.frame(x, y)
plot(y ~ x, df)

Basic data.frame operations

• column access $, [[ • Two-dimensional subsetting [ ridx <- df$x > 0
table(ridx)
## ridx
## FALSE  TRUE
##    49    51
plot(y ~ x, df[ridx, ])

More complicated objects and the methods that act on them

fit <- lm(y ~ x, df)
class(fit)
## [1] "lm"
anova(fit)
## Analysis of Variance Table
##
## Response: y
##           Df Sum Sq Mean Sq F value    Pr(>F)
## x          1 168.92 168.921  152.36 < 2.2e-16 ***
## Residuals 98 108.65   1.109
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(y ~ x, df)
abline(fit)

## 1.3 Packages

library(ggplot2)
ggplot(df, aes(x, y)) +
geom_point() +
geom_smooth(method="lm")

# 2 Tidy R

## 2.1 Using the ‘tidyverse’

readr for data input

library(readr)
pdata_file <- file.choose()    # ALL-sample-sheet.csv
pdata <- read_csv(pdata_file)
## Parsed with column specification:
## cols(
##   .default = col_character(),
##   age = col_double(),
##   t(4;11) = col_logical(),
##   t(9;22) = col_logical(),
##   cyto.normal = col_logical(),
##   ccr = col_logical(),
##   relapse = col_logical(),
##   transplant = col_logical()
## )
## See spec(...) for full column specifications.
pdata
## # A tibble: 128 x 22
##    sample cod   diagnosis sex     age BT    remission CR    date.cr
##    <chr>  <chr> <chr>     <chr> <dbl> <chr> <chr>     <chr> <chr>
##  1 01005  1005  5/21/1997 M        53 B2    CR        CR    8/6/19…
##  2 01010  1010  3/29/2000 M        19 B2    CR        CR    6/27/2…
##  3 03002  3002  6/24/1998 F        52 B4    CR        CR    8/17/1…
##  4 04006  4006  7/17/1997 M        38 B1    CR        CR    9/8/19…
##  5 04007  4007  7/22/1997 M        57 B2    CR        CR    9/17/1…
##  6 04008  4008  7/30/1997 M        17 B1    CR        CR    9/27/1…
##  7 04010  4010  10/30/19… F        18 B1    CR        CR    1/7/19…
##  8 04016  4016  2/10/2000 M        16 B1    CR        CR    4/17/2…
##  9 06002  6002  3/19/1997 M        15 B2    CR        CR    6/9/19…
## 10 08001  8001  1/15/1997 M        40 B2    CR        CR    3/26/1…
## # … with 118 more rows, and 13 more variables: t(4;11) <lgl>,
## #   t(9;22) <lgl>, cyto.normal <lgl>, citog <chr>, mol.biol <chr>,
## #   fusion protein <chr>, mdr <chr>, kinet <chr>, ccr <lgl>,
## #   relapse <lgl>, transplant <lgl>, f.u <chr>, date last seen <chr>

dplyr for data manipulation

library(dplyr)
pdata %>% select(sample, sex, age, mol.biol)
## # A tibble: 128 x 4
##    sample sex     age mol.biol
##    <chr>  <chr> <dbl> <chr>
##  1 01005  M        53 BCR/ABL
##  2 01010  M        19 NEG
##  3 03002  F        52 BCR/ABL
##  4 04006  M        38 ALL1/AF4
##  5 04007  M        57 NEG
##  6 04008  M        17 NEG
##  7 04010  F        18 NEG
##  8 04016  M        16 NEG
##  9 06002  M        15 NEG
## 10 08001  M        40 BCR/ABL
## # … with 118 more rows
pdata %>% filter(sex == "F", age < 50)
## # A tibble: 33 x 22
##    sample cod   diagnosis sex     age BT    remission CR    date.cr
##    <chr>  <chr> <chr>     <chr> <dbl> <chr> <chr>     <chr> <chr>
##  1 04010  4010  10/30/19… F        18 B1    CR        CR    1/7/19…
##  2 09017  9017  2/3/2000  F        27 B     CR        CR    3/23/2…
##  3 12012  12012 5/21/1997 F        36 B3    REF       REF   <NA>
##  4 16009  16009 7/11/2000 F        43 B2    <NA>      <NA>  <NA>
##  5 19005  19005 11/15/19… F        48 B1    CR        CR    2/3/19…
##  6 22009  22009 8/10/1999 F        19 B     <NA>      <NA>  <NA>
##  7 22010  22010 12/31/19… F        26 B     <NA>      <NA>  <NA>
##  8 24001  24001 10/4/1996 F        17 B2    CR        CR    12/20/…
##  9 24005  24005 1/3/1997  F        45 B1    CR        CR    4/8/19…
## 10 24008  24008 5/14/1997 F        20 B2    CR        CR    7/31/1…
## # … with 23 more rows, and 13 more variables: t(4;11) <lgl>,
## #   t(9;22) <lgl>, cyto.normal <lgl>, citog <chr>, mol.biol <chr>,
## #   fusion protein <chr>, mdr <chr>, kinet <chr>, ccr <lgl>,
## #   relapse <lgl>, transplant <lgl>, f.u <chr>, date last seen <chr>
pdata %>% mutate(sex = factor(sex, levels = c("F", "M")))
## # A tibble: 128 x 22
##    sample cod   diagnosis sex     age BT    remission CR    date.cr
##    <chr>  <chr> <chr>     <fct> <dbl> <chr> <chr>     <chr> <chr>
##  1 01005  1005  5/21/1997 M        53 B2    CR        CR    8/6/19…
##  2 01010  1010  3/29/2000 M        19 B2    CR        CR    6/27/2…
##  3 03002  3002  6/24/1998 F        52 B4    CR        CR    8/17/1…
##  4 04006  4006  7/17/1997 M        38 B1    CR        CR    9/8/19…
##  5 04007  4007  7/22/1997 M        57 B2    CR        CR    9/17/1…
##  6 04008  4008  7/30/1997 M        17 B1    CR        CR    9/27/1…
##  7 04010  4010  10/30/19… F        18 B1    CR        CR    1/7/19…
##  8 04016  4016  2/10/2000 M        16 B1    CR        CR    4/17/2…
##  9 06002  6002  3/19/1997 M        15 B2    CR        CR    6/9/19…
## 10 08001  8001  1/15/1997 M        40 B2    CR        CR    3/26/1…
## # … with 118 more rows, and 13 more variables: t(4;11) <lgl>,
## #   t(9;22) <lgl>, cyto.normal <lgl>, citog <chr>, mol.biol <chr>,
## #   fusion protein <chr>, mdr <chr>, kinet <chr>, ccr <lgl>,
## #   relapse <lgl>, transplant <lgl>, f.u <chr>, date last seen <chr>
pdata %>% summarize(
n = n(),
ave_age = mean(age, na.rm=TRUE)
)
## # A tibble: 1 x 2
##       n ave_age
##   <int>   <dbl>
## 1   128    32.4
pdata %>%
group_by(sex) %>%
summarize(
n = n(),
ave_age = mean(age, na.rm = TRUE)
)
## # A tibble: 3 x 3
##   sex       n ave_age
##   <chr> <int>   <dbl>
## 1 F        42    35.2
## 2 M        83    30.9
## 3 <NA>      3   NaN

## 2.2 Tidying data

Input

pdata_file <- file.choose()    # airway-sample-sheet.csv
count_file <- file.choose()    # airway-read-counts.csv
pdata <- read_csv(pdata_file)
## Parsed with column specification:
## cols(
##   SampleName = col_character(),
##   cell = col_character(),
##   dex = col_character(),
##   albut = col_character(),
##   Run = col_character(),
##   avgLength = col_double(),
##   Experiment = col_character(),
##   Sample = col_character(),
##   BioSample = col_character()
## )
pdata <-
pdata %>%
select(Run, cell, dex)
counts <- read_csv(count_file)
## Parsed with column specification:
## cols(
##   .default = col_double(),
##   Run = col_character()
## )
## See spec(...) for full column specifications.
eg <- counts[, 1:6]    # make it easy to work with
eg
## # A tibble: 8 x 6
##   Run   ENSG00000000003 ENSG00000000419 ENSG00000000457 ENSG00000000460
##   <chr>           <dbl>           <dbl>           <dbl>           <dbl>
## 1 SRR1…             679             467             260              60
## 2 SRR1…             448             515             211              55
## 3 SRR1…             873             621             263              40
## 4 SRR1…             408             365             164              35
## 5 SRR1…            1138             587             245              78
## 6 SRR1…            1047             799             331              63
## 7 SRR1…             770             417             233              76
## 8 SRR1…             572             508             229              60
## # … with 1 more variable: ENSG00000000938 <dbl>

Joining

data <- left_join(pdata, eg)
## Joining, by = "Run"
data
## # A tibble: 8 x 8
##   Run   cell  dex   ENSG00000000003 ENSG00000000419 ENSG00000000457
##   <chr> <chr> <chr>           <dbl>           <dbl>           <dbl>
## 1 SRR1… N613… untrt             679             467             260
## 2 SRR1… N613… trt               448             515             211
## 3 SRR1… N052… untrt             873             621             263
## 4 SRR1… N052… trt               408             365             164
## 5 SRR1… N080… untrt            1138             587             245
## 6 SRR1… N080… trt              1047             799             331
## 7 SRR1… N061… untrt             770             417             233
## 8 SRR1… N061… trt               572             508             229
## # … with 2 more variables: ENSG00000000460 <dbl>, ENSG00000000938 <dbl>

Gathering

library(tidyr)
tbl <- gather(data, "Gene", "Count", -(1:3))
tbl
## # A tibble: 40 x 5
##    Run        cell    dex   Gene            Count
##    <chr>      <chr>   <chr> <chr>           <dbl>
##  1 SRR1039508 N61311  untrt ENSG00000000003   679
##  2 SRR1039509 N61311  trt   ENSG00000000003   448
##  3 SRR1039512 N052611 untrt ENSG00000000003   873
##  4 SRR1039513 N052611 trt   ENSG00000000003   408
##  5 SRR1039516 N080611 untrt ENSG00000000003  1138
##  6 SRR1039517 N080611 trt   ENSG00000000003  1047
##  7 SRR1039520 N061011 untrt ENSG00000000003   770
##  8 SRR1039521 N061011 trt   ENSG00000000003   572
##  9 SRR1039508 N61311  untrt ENSG00000000419   467
## 10 SRR1039509 N61311  trt   ENSG00000000419   515
## # … with 30 more rows
tbl %>%
group_by(Run) %>%
summarize(lib_size = sum(Count))
## # A tibble: 8 x 2
##   Run        lib_size
##   <chr>         <dbl>
## 1 SRR1039508     1466
## 2 SRR1039509     1229
## 3 SRR1039512     1799
## 4 SRR1039513      972
## 5 SRR1039516     2049
## 6 SRR1039517     2240
## 7 SRR1039520     1496
## 8 SRR1039521     1369
tbl %>%
group_by(Gene) %>%
summarize(
ave_count = mean(Count),
ave_log_count = mean(log(1 + Count))
)
## # A tibble: 5 x 3
##   Gene            ave_count ave_log_count
##   <chr>               <dbl>         <dbl>
## 1 ENSG00000000003   742.            6.55
## 2 ENSG00000000419   535.            6.26
## 3 ENSG00000000457   242             5.48
## 4 ENSG00000000460    58.4           4.05
## 5 ENSG00000000938     0.375         0.224

## 2.3 Visualization

Tidy all the data.

counts_tbl <- gather(counts, "Gene", "Count", -Run)
data_tbl <- left_join(pdata, counts_tbl)
## Joining, by = "Run"
data_tbl
## # A tibble: 267,752 x 5
##    Run        cell   dex   Gene            Count
##    <chr>      <chr>  <chr> <chr>           <dbl>
##  1 SRR1039508 N61311 untrt ENSG00000000003   679
##  2 SRR1039508 N61311 untrt ENSG00000000419   467
##  3 SRR1039508 N61311 untrt ENSG00000000457   260
##  4 SRR1039508 N61311 untrt ENSG00000000460    60
##  5 SRR1039508 N61311 untrt ENSG00000000938     0
##  6 SRR1039508 N61311 untrt ENSG00000000971  3251
##  7 SRR1039508 N61311 untrt ENSG00000001036  1433
##  8 SRR1039508 N61311 untrt ENSG00000001084   519
##  9 SRR1039508 N61311 untrt ENSG00000001167   394
## 10 SRR1039508 N61311 untrt ENSG00000001460   172
## # … with 267,742 more rows

Summarize average ‘expression’ of each gene.

gene_summaries <-
data_tbl %>%
group_by(Gene) %>%
summarize(
ave_count = mean(Count),
ave_log_count = mean(log(1 + Count))
)
gene_summaries
## # A tibble: 33,469 x 3
##    Gene            ave_count ave_log_count
##    <chr>               <dbl>         <dbl>
##  1 ENSG00000000003   742.            6.55
##  2 ENSG00000000419   535.            6.26
##  3 ENSG00000000457   242             5.48
##  4 ENSG00000000460    58.4           4.05
##  5 ENSG00000000938     0.375         0.224
##  6 ENSG00000000971  6035.            8.63
##  7 ENSG00000001036  1305             7.15
##  8 ENSG00000001084   615.            6.40
##  9 ENSG00000001167   392.            5.89
## 10 ENSG00000001460   188.            5.21
## # … with 33,459 more rows

Visualize using ggplot2

library(ggplot2)
ggplot(gene_summaries, aes(ave_log_count)) +
geom_density()

# 3 Bioconductor

## 3.1 Objects are important

library(Biostrings)
seq = c("AAACA", "CATGC")
dna <- DNAStringSet(seq)
reverseComplement(dna)
##   A DNAStringSet instance of length 2
##     width seq
## [1]     5 TGTTT
## [2]     5 GCATG
dm3_upstream_file <-
system.file(package="Biostrings", "extdata", "dm3_upstream2000.fa.gz")
readLines(dm3_upstream_file, 10)
##  [1] ">NM_078863_up_2000_chr2L_16764737_f chr2L:16764737-16766736"
##  [2] "gttggtggcccaccagtgccaaaatacacaagaagaagaaacagcatctt"
##  [3] "gacactaaaatgcaaaaattgctttgcgtcaatgactcaaaacgaaaatg"
##  [4] "tttttgtgcttttcgaacaaaaaattgggagcagaatattggattcgctt"
##  [5] "ttttcgcatcgaatatcttaagggagcaagggaagaaccatctagaataa"
##  [6] "taaagaagaccaaaatgtatcgtaactaaaggttttttttattaattatt"
##  [7] "aaatgttaaatattaacttataccaactcattggctttacaagtacaaca"
##  [8] "aataaccccaaaataatttattgtcaggtgctaaattgttgtttgttgtt"
##  [9] "cttggaatttgttttaaatgctcaatttatgtttttgtctttttgcccac"
## [10] "aattctgctcgacaatgtcacagattttgtttcagaaacttagcaaaaag"
dna <- readDNAStringSet(dm3_upstream_file)
dna
##   A DNAStringSet instance of length 26454
##         width seq                                      names
##     [1]  2000 GTTGGTGGCCCACCAGTGC...GTTTACCGGTTGCACGGT NM_078863_up_2000...
##     [2]  2000 TTATTTATGTAGGCGCCCG...CGGAAAGTCATCCTCGAT NM_001201794_up_2...
##     [3]  2000 TTATTTATGTAGGCGCCCG...CGGAAAGTCATCCTCGAT NM_001201795_up_2...
##     [4]  2000 TTATTTATGTAGGCGCCCG...CGGAAAGTCATCCTCGAT NM_001201796_up_2...
##     [5]  2000 TTATTTATGTAGGCGCCCG...CGGAAAGTCATCCTCGAT NM_001201797_up_2...
##     ...   ... ...
## [26450]  2000 ATTTACAAGACTAATAAAG...ATTAAATTTCAATAAAAC NM_001111010_up_2...
## [26451]  2000 GATATACGAAGGACGACCT...TTTGAGTTGTTATATATT NM_001015258_up_2...
## [26452]  2000 GATATACGAAGGACGACCT...TTTGAGTTGTTATATATT NM_001110997_up_2...
## [26453]  2000 GATATACGAAGGACGACCT...TTTGAGTTGTTATATATT NM_001276245_up_2...
## [26454]  2000 CGTATGTATTAGTTAACTC...AAGTGTAAGAACAAATTG NM_001015497_up_2...
gc <- letterFrequency(dna, "GC", as.prob = TRUE)
hist(gc)

library(BSgenome)
library(BSgenome.Hsapiens.UCSC.hg38)
BSgenome.Hsapiens.UCSC.hg38
## Human genome:
## # organism: Homo sapiens (Human)
## # provider: UCSC
## # provider version: hg38
## # release date: Dec. 2013
## # release name: Genome Reference Consortium GRCh38
## # 455 sequences:
## #   chr1                    chr2                    chr3
## #   chr4                    chr5                    chr6
## #   chr7                    chr8                    chr9
## #   chr10                   chr11                   chr12
## #   chr13                   chr14                   chr15
## #   ...                     ...                     ...
## #   chrUn_KI270744v1        chrUn_KI270745v1        chrUn_KI270746v1
## #   chrUn_KI270747v1        chrUn_KI270748v1        chrUn_KI270749v1
## #   chrUn_KI270750v1        chrUn_KI270751v1        chrUn_KI270752v1
## #   chrUn_KI270753v1        chrUn_KI270754v1        chrUn_KI270755v1
## #   chrUn_KI270756v1        chrUn_KI270757v1
## # (use 'seqnames()' to see all the sequence names, use the '$' or '[[' ## # operator to access a given sequence) chr17 <- BSgenome.Hsapiens.UCSC.hg38[["chr17"]] chr17 ## 83257441-letter "DNAString" instance ## seq: NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN...NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN letterFrequency(chr17, "GC", as.prob=TRUE) ## G|C ## 0.4513163 ## 3.2 The interface to objects is important library(S4Vectors) What is a vector? • length(), [, … What is a DataFrame? • a column of vectors, as defined above DataFrame(x = rnorm(100), y = rnorm(100)) ## DataFrame with 100 rows and 2 columns ## x y ## <numeric> <numeric> ## 1 -0.944041504379253 -0.455610766974721 ## 2 -0.271818699506858 0.288951532687977 ## 3 0.376593013180833 2.25049393969679 ## 4 2.08865852110716 -1.07803387444287 ## 5 0.121827514586298 -0.33510144878213 ## ... ... ... ## 96 -0.185216617632044 -1.89795810437905 ## 97 1.59604096379008 0.686796046925052 ## 98 -2.63000888891303 0.804185609470674 ## 99 -1.10334520519311 0.00814316376383511 ## 100 -2.66678004450304 0.387616874336104 Is DNAStringSet a vector? length(dna) ## [1] 26454 dna[1:4] ## A DNAStringSet instance of length 4 ## width seq names ## [1] 2000 GTTGGTGGCCCACCAGTGCCA...AAGTTTACCGGTTGCACGGT NM_078863_up_2000... ## [2] 2000 TTATTTATGTAGGCGCCCGTT...TACGGAAAGTCATCCTCGAT NM_001201794_up_2... ## [3] 2000 TTATTTATGTAGGCGCCCGTT...TACGGAAAGTCATCCTCGAT NM_001201795_up_2... ## [4] 2000 TTATTTATGTAGGCGCCCGTT...TACGGAAAGTCATCCTCGAT NM_001201796_up_2... So… nms = names(dna) pos = sub(".* ", "", nms) df <- DataFrame( dna = unname(dna), pos = pos ) df$gc <- letterFrequency(df\$dna, "GC", as.prob=TRUE)[,1]
df
## DataFrame with 26454 rows and 3 columns
##                           dna                     pos        gc
##                <DNAStringSet>             <character> <numeric>
## 1     GTTGGTGGCC...GTTGCACGGT chr2L:16764737-16766736    0.3785
## 2     TTATTTATGT...CATCCTCGAT   chr2L:8382455-8384454      0.43
## 3     TTATTTATGT...CATCCTCGAT   chr2L:8382455-8384454      0.43
## 4     TTATTTATGT...CATCCTCGAT   chr2L:8382455-8384454      0.43
## 5     TTATTTATGT...CATCCTCGAT   chr2L:8382455-8384454      0.43
## ...                       ...                     ...       ...
## 26450 ATTTACAAGA...TCAATAAAAC     chrXHet:73686-75685    0.3455
## 26451 GATATACGAA...GTTATATATT     chrXHet:12884-14883    0.3065
## 26452 GATATACGAA...GTTATATATT     chrXHet:12884-14883    0.3065
## 26453 GATATACGAA...GTTATATATT     chrXHet:12884-14883    0.3065
## 26454 CGTATGTATT...GAACAAATTG   chrYHet:277861-279860    0.3865

## 3.3 What’s available?

Web site: https://bioconductor.org

Support site: https://support.bioconductor.org

slack: https://community-bioc.slack.com (sign-up:

## 3.4 Installing software

library(BiocManager)
BiocManager::available("BSgenome.Hsapiens")
##  [1] "BSgenome.Hsapiens.1000genomes.hs37d5"
##  [2] "BSgenome.Hsapiens.NCBI.GRCh38"
##  [3] "BSgenome.Hsapiens.UCSC.hg17"
##  [5] "BSgenome.Hsapiens.UCSC.hg18"
##  [7] "BSgenome.Hsapiens.UCSC.hg19"
##  [9] "BSgenome.Hsapiens.UCSC.hg38"
## [10] "BSgenome.Hsapiens.UCSC.hg38.masked"
## also possible to install CRAN, github packages
BiocManager::install("BSgenome.Hsapiens.UCSC.hg38")

# 4 Provenance

sessionInfo()
## R version 3.6.0 Patched (2019-04-26 r76431)
## Platform: x86_64-apple-darwin17.7.0 (64-bit)
## Running under: macOS High Sierra 10.13.6
##
## Matrix products: default
## BLAS:   /Users/ma38727/bin/R-3-6-branch/lib/libRblas.dylib
## LAPACK: /Users/ma38727/bin/R-3-6-branch/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] stats4    parallel  stats     graphics  grDevices utils     datasets
## [8] methods   base
##
## other attached packages:
##  [1] BiocManager_1.30.5.1              BSgenome.Hsapiens.UCSC.hg38_1.4.1
##  [3] BSgenome_1.53.0                   rtracklayer_1.45.1
##  [5] GenomicRanges_1.37.14             GenomeInfoDb_1.21.1
##  [7] Biostrings_2.53.0                 XVector_0.25.0
##  [9] IRanges_2.19.10                   S4Vectors_0.23.17
## [11] BiocGenerics_0.31.4               tidyr_0.8.3
## [15] ggplot2_3.2.0                     BiocStyle_2.13.2
##
## loaded via a namespace (and not attached):
##  [1] Rcpp_1.0.1                  lattice_0.20-38
##  [3] Rsamtools_2.1.2             assertthat_0.2.1
##  [5] zeallot_0.1.0               digest_0.6.19
##  [7] utf8_1.1.4                  R6_2.4.0
##  [9] backports_1.1.4             evaluate_0.14
## [11] pillar_1.4.2                zlibbioc_1.31.0
## [13] rlang_0.4.0                 lazyeval_0.2.2
## [15] Matrix_1.2-17               rmarkdown_1.13
## [17] labeling_0.3                BiocParallel_1.19.0
## [19] stringr_1.4.0               RCurl_1.95-4.12
## [21] munsell_0.5.0               DelayedArray_0.11.2
## [23] compiler_3.6.0              xfun_0.8
## [25] pkgconfig_2.0.2             htmltools_0.3.6
## [27] tidyselect_0.2.5            SummarizedExperiment_1.15.5
## [29] tibble_2.1.3                GenomeInfoDbData_1.2.1
## [31] bookdown_0.11               codetools_0.2-16
## [33] matrixStats_0.54.0          XML_3.98-1.20
## [35] fansi_0.4.0                 crayon_1.3.4
## [37] withr_2.1.2                 GenomicAlignments_1.21.4
## [39] bitops_1.0-6                grid_3.6.0
## [41] gtable_0.3.0                magrittr_1.5
## [43] scales_1.0.0                cli_1.1.0
## [45] stringi_1.4.3               vctrs_0.1.0
## [47] tools_3.6.0                 Biobase_2.45.0
## [49] glue_1.3.1                  purrr_0.3.2
## [51] hms_0.4.2                   yaml_2.2.0
## [53] colorspace_1.4-1            knitr_1.23