‘atomic’ vectors
logical()
, integer()
, numeric()
, character()
, …
x <- c(1, 3, 5)
y <- 1:5
Interface: length()
, [
, [<-
lists
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
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
$
, [[
[
ridx <- df$x > 0
table(ridx)
## ridx
## FALSE TRUE
## 41 59
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 104.115 104.115 121.33 < 2.2e-16 ***
## Residuals 98 84.093 0.858
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(y ~ x, df)
abline(fit)
library(ggplot2)
ggplot(df, aes(x, y)) +
geom_point() +
geom_smooth(method="lm")
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 <NA> 3 NaN
## 2 F 42 35.2
## 3 M 83 30.9
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
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()
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
library(S4Vectors)
What is a vector?
length()
, [
, …What is a DataFrame
?
DataFrame(x = rnorm(100), y = rnorm(100))
## DataFrame with 100 rows and 2 columns
## x y
## <numeric> <numeric>
## 1 -0.233552875968446 -0.197245673900864
## 2 0.79973289265268 0.608456121384606
## 3 0.857866984531214 1.00585516791928
## 4 -0.691657596442343 -1.05408962337497
## 5 0.988252616139895 -2.58529945943355
## ... ... ...
## 96 -1.16295772489566 -0.62644646636491
## 97 0.446992839470108 0.865904406435964
## 98 -0.933584803339199 -0.238988965184255
## 99 -0.822933106838319 1.4031435100263
## 100 -1.00988229314328 0.769625593046675
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
Web site: https://bioconductor.org
Support site: https://support.bioconductor.org
slack: https://community-bioc.slack.com (sign-up:
library(BiocManager)
BiocManager::available("BSgenome.Hsapiens")
## [1] "BSgenome.Hsapiens.1000genomes.hs37d5"
## [2] "BSgenome.Hsapiens.NCBI.GRCh38"
## [3] "BSgenome.Hsapiens.UCSC.hg17"
## [4] "BSgenome.Hsapiens.UCSC.hg17.masked"
## [5] "BSgenome.Hsapiens.UCSC.hg18"
## [6] "BSgenome.Hsapiens.UCSC.hg18.masked"
## [7] "BSgenome.Hsapiens.UCSC.hg19"
## [8] "BSgenome.Hsapiens.UCSC.hg19.masked"
## [9] "BSgenome.Hsapiens.UCSC.hg38"
## [10] "BSgenome.Hsapiens.UCSC.hg38.masked"
## also possible to install CRAN, github packages
BiocManager::install("BSgenome.Hsapiens.UCSC.hg38")
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.12 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
## [13] dplyr_0.8.1 readr_1.3.1
## [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.1 zlibbioc_1.31.0
## [13] rlang_0.3.4 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.7
## [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.3
## [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