The material in this course requires R version 3.3 and Bioconductor version 3.4
stopifnot(
    getRversion() >= '3.3' && getRversion() < '3.4',
    BiocInstaller::biocVersion() == "3.4"
)
This section focuses on classes, methods, and packages, with the goal being to learn to navigate the help system and interactive discovery facilities.
Sequence analysis is specialized
Additional considerations
Solution: use well-defined classes to represent complex data; methods operate on the classes to perform useful functions. Classes and methods are placed together and distributed as packages so that we can all benefit from the hard work and tested code of others.
                   VariantAnnotation
                           |
                           v
                    GenomicFeatures
                           |
                           v
                       BSgenome
                           |
                           v
                      rtracklayer
                           |
                           v
                    GenomicAlignments
                      |           |
                      v           v
     SummarizedExperiment   Rsamtools  ShortRead
                  |         |      |      |
                  v         v      v      v
                GenomicRanges     Biostrings
                        |          |
                        v          v
               GenomeInfoDb   (XVector)
                        |     |
                        v     v
                        IRanges
                           |
                           v 
                      (S4Vectors)
The IRanges package defines an important class for specifying integer ranges, e.g.,
library(IRanges)
ir <- IRanges(start=c(10, 20, 30), width=5)
ir
## IRanges object with 3 ranges and 0 metadata columns:
##           start       end     width
##       <integer> <integer> <integer>
##   [1]        10        14         5
##   [2]        20        24         5
##   [3]        30        34         5
There are many interesting operations to be performed on ranges, e.g, flank() identifies adjacent ranges
flank(ir, 3)
## IRanges object with 3 ranges and 0 metadata columns:
##           start       end     width
##       <integer> <integer> <integer>
##   [1]         7         9         3
##   [2]        17        19         3
##   [3]        27        29         3
The IRanges class is part of a class hierarchy. To see this, ask R for the class of ir, and for the class definition of the IRanges class
class(ir)
## [1] "IRanges"
## attr(,"package")
## [1] "IRanges"
getClass(class(ir))
## Class "IRanges" [package "IRanges"]
## 
## Slots:
##                                                                                       
## Name:            start           width           NAMES     elementType elementMetadata
## Class:         integer         integer characterORNULL       character DataTableORNULL
##                       
## Name:         metadata
## Class:            list
## 
## Extends: 
## Class "Ranges", directly
## Class "GRangesOrIRanges", directly
## Class "IntegerList", by class "Ranges", distance 2
## Class "RangesORmissing", by class "Ranges", distance 2
## Class "AtomicList", by class "Ranges", distance 3
## Class "List", by class "Ranges", distance 4
## Class "Vector", by class "Ranges", distance 5
## Class "Annotated", by class "Ranges", distance 6
## 
## Known Subclasses: "NormalIRanges", "GroupingIRanges"
Notice that IRanges extends the Ranges class. Show
Now try entering ?flank (if not using RStudio, enter ?"flank,<tab>" where <tab> means to press the tab key to ask for tab completion). You can see that there are help pages for flank operating on several different classes. Select the completion
?"flank,Ranges-method" 
and verify that you’re at the page that describes the method relevant to an IRanges instance. Explore other range-based operations.
The GenomicRanges package extends the notion of ranges to include features relevant to application of ranges in sequence analysis, particularly the ability to associate a range with a sequence name (e.g., chromosome) and a strand. Create a GRanges instance based on our IRanges instance, as follows
library(GenomicRanges)
gr <- GRanges(c("chr1", "chr1", "chr2"), ir, strand=c("+", "-", "+"))
gr
## GRanges object with 3 ranges and 0 metadata columns:
##       seqnames    ranges strand
##          <Rle> <IRanges>  <Rle>
##   [1]     chr1  [10, 14]      +
##   [2]     chr1  [20, 24]      -
##   [3]     chr2  [30, 34]      +
##   -------
##   seqinfo: 2 sequences from an unspecified genome; no seqlengths
The notion of flanking sequence has a more nuanced meaning in biology. In particular we might expect that flanking sequence on the + strand would precede the range, but on the minus strand would follow it. Verify that flank applied to a GRanges object has this behavior.
flank(gr, 3)
## GRanges object with 3 ranges and 0 metadata columns:
##       seqnames    ranges strand
##          <Rle> <IRanges>  <Rle>
##   [1]     chr1  [ 7,  9]      +
##   [2]     chr1  [25, 27]      -
##   [3]     chr2  [27, 29]      +
##   -------
##   seqinfo: 2 sequences from an unspecified genome; no seqlengths
Discover what classes GRanges extends, find the help page documenting the behavior of flank when applied to a GRanges object,
It seems like there might be a number of helpful methods available for working with genomic ranges; we can discover some of these from the command line, indicating that the methods should be on the current search() path
methods(class="GRanges")
##   [1] !=                  $                   $<-                 %in%               
##   [5] <                   <=                  ==                  >                  
##   [9] >=                  BamViews            NROW                Ops                
##  [13] ROWNAMES            ScanBamParam        ScanBcfParam        [                  
##  [17] [<-                 aggregate           anyNA               append             
##  [21] as.character        as.complex          as.data.frame       as.env             
##  [25] as.factor           as.integer          as.list             as.logical         
##  [29] as.matrix           as.numeric          as.raw              bamWhich<-         
##  [33] blocks              browseGenome        by                  c                  
##  [37] chrom               chrom<-             coerce              coerce<-           
##  [41] countOverlaps       coverage            disjoin             disjointBins       
##  [45] distance            distanceToNearest   duplicated          elementMetadata    
##  [49] elementMetadata<-   end                 end<-               eval               
##  [53] expand              expand.grid         export              extractROWS        
##  [57] extractUpstreamSeqs findOverlaps        flank               follow             
##  [61] gaps                getPromoterSeq      granges             head               
##  [65] high2low            intersect           is.unsorted         isDisjoint         
##  [69] length              lengths             liftOver            locateVariants     
##  [73] mapFromAlignments   mapFromTranscripts  mapToAlignments     mapToTranscripts   
##  [77] match               mcols               mcols<-             merge              
##  [81] metadata            metadata<-          mstack              names              
##  [85] names<-             narrow              nearest             order              
##  [89] overlapsAny         parallelSlotNames   pcompare            pgap               
##  [93] pintersect          pmapFromAlignments  pmapFromTranscripts pmapToAlignments   
##  [97] pmapToTranscripts   precede             predictCoding       promoters          
## [101] psetdiff            punion              range               ranges             
## [105] ranges<-            rank                readVcf             reduce             
## [109] relist              relistToClass       rename              rep                
## [113] rep.int             replaceROWS         resize              restrict           
## [117] rev                 rowRanges<-         scanFa              scanTabix          
## [121] scanVcf             score               score<-             selfmatch          
## [125] seqinfo             seqinfo<-           seqlevelsInUse      seqnames           
## [129] seqnames<-          setdiff             setequal            shift              
## [133] shiftApply          show                showAsCell          slidingWindows     
## [137] sort                split               split<-             start              
## [141] start<-             strand              strand<-            subset             
## [145] subsetByOverlaps    summarizeOverlaps   summary             table              
## [149] tail                tapply              tile                trim               
## [153] union               unique              update              updateObject       
## [157] values              values<-            width               width<-            
## [161] window              window<-            with                xtabs              
## [165] xtfrm              
## see '?methods' for accessing help and source code
Notice that the available flank() methods have been augmented by the methods defined in the GenomicRanges package, including those that are relevant (via inheritance) to the GRanges class.
grep("flank", methods(class="GRanges"), value=TRUE)
## [1] "flank,GenomicRanges-method"
Verify that the help page documents the behavior we just observed.
?"flank,GenomicRanges-method"
Use help() to list the help pages in the GenomicRanges package, and vignettes() to view and access available vignettes; these are also available in the Rstudio ‘Help’ tab.
help(package="GenomicRanges")
vignette(package="GenomicRanges")
vignette(package="GenomicRanges", "GenomicRangesHOWTOs")
GRanges and GRangesList classesAside: ‘TxDb’ packages provide an R representation of gene models
library(TxDb.Hsapiens.UCSC.hg19.knownGene)
txdb <- TxDb.Hsapiens.UCSC.hg19.knownGene
exons(): GRanges
exons(txdb)
## GRanges object with 289969 ranges and 1 metadata column:
##                  seqnames         ranges strand |   exon_id
##                     <Rle>      <IRanges>  <Rle> | <integer>
##        [1]           chr1 [11874, 12227]      + |         1
##        [2]           chr1 [12595, 12721]      + |         2
##        [3]           chr1 [12613, 12721]      + |         3
##        [4]           chr1 [12646, 12697]      + |         4
##        [5]           chr1 [13221, 14409]      + |         5
##        ...            ...            ...    ... .       ...
##   [289965] chrUn_gl000241 [35706, 35859]      - |    289965
##   [289966] chrUn_gl000241 [36711, 36875]      - |    289966
##   [289967] chrUn_gl000243 [11501, 11530]      + |    289967
##   [289968] chrUn_gl000243 [13608, 13637]      + |    289968
##   [289969] chrUn_gl000247 [ 5787,  5816]      - |    289969
##   -------
##   seqinfo: 93 sequences (1 circular) from hg19 genome
exonsBy(): GRangesList
exonsBy(txdb, "tx")
## GRangesList object of length 82960:
## $1 
## GRanges object with 3 ranges and 3 metadata columns:
##       seqnames         ranges strand |   exon_id   exon_name exon_rank
##          <Rle>      <IRanges>  <Rle> | <integer> <character> <integer>
##   [1]     chr1 [11874, 12227]      + |         1        <NA>         1
##   [2]     chr1 [12613, 12721]      + |         3        <NA>         2
##   [3]     chr1 [13221, 14409]      + |         5        <NA>         3
## 
## $2 
## GRanges object with 3 ranges and 3 metadata columns:
##       seqnames         ranges strand | exon_id exon_name exon_rank
##   [1]     chr1 [11874, 12227]      + |       1      <NA>         1
##   [2]     chr1 [12595, 12721]      + |       2      <NA>         2
##   [3]     chr1 [13403, 14409]      + |       6      <NA>         3
## 
## $3 
## GRanges object with 3 ranges and 3 metadata columns:
##       seqnames         ranges strand | exon_id exon_name exon_rank
##   [1]     chr1 [11874, 12227]      + |       1      <NA>         1
##   [2]     chr1 [12646, 12697]      + |       4      <NA>         2
##   [3]     chr1 [13221, 14409]      + |       5      <NA>         3
## 
## ...
## <82957 more elements>
## -------
## seqinfo: 93 sequences (1 circular) from hg19 genome
GRanges / GRangesList are incredibly useful
Many biologically interesting questions represent operations on ranges
GenomicRanges::summarizeOverlaps()GenomicRanges::nearest(), [ChIPseeker][]GRanges Algebra
shift(), narrow(), flank(), promoters(), resize(), restrict(), trim()?"intra-range-methods"range(), reduce(), gaps(), disjoin()coverage() (!)?"inter-range-methods"findOverlaps(), countOverlaps(), …, %over%, %within%, %outside%; union(), intersect(), setdiff(), punion(), pintersect(), psetdiff()Classes
Methods –
reverseComplement()letterFrequency()matchPDict(), matchPWM()Related packages
Example
Whole-genome sequences are distrubuted by ENSEMBL, NCBI, and others as FASTA files; model organism whole genome sequences are packaged into more user-friendly BSgenome packages. The following calculates GC content across chr14.
library(BSgenome.Hsapiens.UCSC.hg19)
chr14_range = GRanges("chr14", IRanges(1, seqlengths(Hsapiens)["chr14"]))
chr14_dna <- getSeq(Hsapiens, chr14_range)
letterFrequency(chr14_dna, "GC", as.prob=TRUE)
##           G|C
## [1,] 0.336276Classes – GenomicRanges-like behaivor
Methods
readGAlignments(), readGAlignmentsList()summarizeOverlaps()Example
Find reads supporting the junction identified above, at position 19653707 + 66M = 19653773 of chromosome 14
library(GenomicRanges)
library(GenomicAlignments)
library(Rsamtools)
## our 'region of interest'
roi <- GRanges("chr14", IRanges(19653773, width=1)) 
## sample data
library('RNAseqData.HNRNPC.bam.chr14')
bf <- BamFile(RNAseqData.HNRNPC.bam.chr14_BAMFILES[[1]], asMates=TRUE)
## alignments, junctions, overlapping our roi
paln <- readGAlignmentsList(bf)
j <- summarizeJunctions(paln, with.revmap=TRUE)
j_overlap <- j[j %over% roi]
## supporting reads
paln[j_overlap$revmap[[1]]]
## GAlignmentsList object of length 8:
## [[1]] 
## GAlignments object with 2 alignments and 0 metadata columns:
##       seqnames strand      cigar qwidth    start      end width njunc
##   [1]    chr14      -  66M120N6M     72 19653707 19653898   192     1
##   [2]    chr14      + 7M1270N65M     72 19652348 19653689  1342     1
## 
## [[2]] 
## GAlignments object with 2 alignments and 0 metadata columns:
##       seqnames strand     cigar qwidth    start      end width njunc
##   [1]    chr14      - 66M120N6M     72 19653707 19653898   192     1
##   [2]    chr14      +       72M     72 19653686 19653757    72     0
## 
## [[3]] 
## GAlignments object with 2 alignments and 0 metadata columns:
##       seqnames strand     cigar qwidth    start      end width njunc
##   [1]    chr14      +       72M     72 19653675 19653746    72     0
##   [2]    chr14      - 65M120N7M     72 19653708 19653899   192     1
## 
## ...
## <5 more elements>
## -------
## seqinfo: 93 sequences from an unspecified genomeClasses – GenomicRanges-like behavior
Functions and methods
readVcf(), readGeno(), readInfo(), readGT(), writeVcf(), filterVcf()locateVariants() (variants overlapping ranges), predictCoding(), summarizeVariants()genotypeToSnpMatrix(), snpSummary()Example
Read variants from a VCF file, and annotate with respect to a known gene model
## input variants
library(VariantAnnotation)
fl <- system.file("extdata", "chr22.vcf.gz", package="VariantAnnotation")
vcf <- readVcf(fl, "hg19")
seqlevels(vcf) <- "chr22"
## known gene model
library(TxDb.Hsapiens.UCSC.hg19.knownGene)
coding <- locateVariants(rowRanges(vcf),
    TxDb.Hsapiens.UCSC.hg19.knownGene,
    CodingVariants())
head(coding)
## GRanges object with 6 ranges and 9 metadata columns:
##     seqnames               ranges strand | LOCATION  LOCSTART    LOCEND   QUERYID        TXID
##        <Rle>            <IRanges>  <Rle> | <factor> <integer> <integer> <integer> <character>
##   1    chr22 [50301422, 50301422]      - |   coding       939       939        24       75253
##   2    chr22 [50301476, 50301476]      - |   coding       885       885        25       75253
##   3    chr22 [50301488, 50301488]      - |   coding       873       873        26       75253
##   4    chr22 [50301494, 50301494]      - |   coding       867       867        27       75253
##   5    chr22 [50301584, 50301584]      - |   coding       777       777        28       75253
##   6    chr22 [50302962, 50302962]      - |   coding       698       698        57       75253
##             CDSID      GENEID       PRECEDEID        FOLLOWID
##     <IntegerList> <character> <CharacterList> <CharacterList>
##   1        218562       79087                                
##   2        218562       79087                                
##   3        218562       79087                                
##   4        218562       79087                                
##   5        218562       79087                                
##   6        218563       79087                                
##   -------
##   seqinfo: 1 sequence from an unspecified genome; no seqlengthsRelated packages
Reference
import(): BED, GTF, WIG, 2bit, etcexport(): GRanges to BED, GTF, WIG, …Functions and methods
assay() / assays(), rowData() / rowRanges(), colData(), metadata()subsetByOverlaps()GenomicAlignmentsRecall: overall workflow
BAM files of aligned reads
Header
@HD     VN:1.0  SO:coordinate
@SQ     SN:chr1 LN:249250621
@SQ     SN:chr10        LN:135534747
@SQ     SN:chr11        LN:135006516
...
@SQ     SN:chrY LN:59373566
@PG     ID:TopHat       VN:2.0.8b       CL:/home/hpages/tophat-2.0.8b.Linux_x86_64/tophat --mate-inner-dist 150 --solexa-quals --max-multihits 5 --no-discordant --no-mixed --coverage-search --microexon-search --library-type fr-unstranded --num-threads 2 --output-dir tophat2_out/ERR127306 /home/hpages/bowtie2-2.1.0/indexes/hg19 fastq/ERR127306_1.fastq fastq/ERR127306_2.fastqID, flag, alignment and mate
ERR127306.7941162       403     chr14   19653689        3       72M             =       19652348        -1413  ...
ERR127306.22648137      145     chr14   19653692        1       72M             =       19650044        -3720  ...Sequence and quality
... GAATTGATCAGTCTCATCTGAGAGTAACTTTGTACCCATCACTGATTCCTTCTGAGACTGCCTCCACTTCCC        *'%%%%%#&&%''#'&%%%)&&%%$%%'%%'&*****$))$)'')'%)))&)%%%%$'%%%%&"))'')%))
... TTGATCAGTCTCATCTGAGAGTAACTTTGTACCCATCACTGATTCCTTCTGAGACTGCCTCCACTTCCCCAG        '**)****)*'*&*********('&)****&***(**')))())%)))&)))*')&***********)****Tags
... AS:i:0  XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:72 YT:Z:UU NH:i:2  CC:Z:chr22      CP:i:16189276   HI:i:0
... AS:i:0  XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:72 YT:Z:UU NH:i:3  CC:Z:=  CP:i:19921600   HI:i:0Typically, sorted (by position) and indexed (‘.bai’ files)
Use an example BAM file (fl could be the path to your own BAM file)
## example BAM data
library(RNAseqData.HNRNPC.bam.chr14)
## one BAM file
fl <- RNAseqData.HNRNPC.bam.chr14_BAMFILES[1]
## Let R know that this is a BAM file, not just a character vector
library(Rsamtools)
bfl <- BamFile(fl)Input the data into R
aln <- readGAlignments(bfl)
aln
## GAlignments object with 800484 alignments and 0 metadata columns:
##            seqnames strand       cigar    qwidth     start       end     width     njunc
##               <Rle>  <Rle> <character> <integer> <integer> <integer> <integer> <integer>
##        [1]    chr14      +         72M        72  19069583  19069654        72         0
##        [2]    chr14      +         72M        72  19363738  19363809        72         0
##        [3]    chr14      -         72M        72  19363755  19363826        72         0
##        [4]    chr14      +         72M        72  19369799  19369870        72         0
##        [5]    chr14      -         72M        72  19369828  19369899        72         0
##        ...      ...    ...         ...       ...       ...       ...       ...       ...
##   [800480]    chr14      -         72M        72 106989780 106989851        72         0
##   [800481]    chr14      +         72M        72 106994763 106994834        72         0
##   [800482]    chr14      -         72M        72 106994819 106994890        72         0
##   [800483]    chr14      +         72M        72 107003080 107003151        72         0
##   [800484]    chr14      -         72M        72 107003171 107003242        72         0
##   -------
##   seqinfo: 93 sequences from an unspecified genome
readGAlignmentPairs() / readGAlignmentsList() if paired-end datamethods(class=class(aln))
##   [1] !=                     %in%                   <                      <=                    
##   [5] ==                     >                      >=                     NROW                  
##   [9] ROWNAMES               [                      [<-                    aggregate             
##  [13] anyNA                  append                 as.character           as.complex            
##  [17] as.data.frame          as.env                 as.integer             as.list               
##  [21] as.logical             as.matrix              as.numeric             as.raw                
##  [25] asBED                  by                     c                      cigar                 
##  [29] coerce                 countOverlaps          coverage               duplicated            
##  [33] elementMetadata        elementMetadata<-      end                    eval                  
##  [37] expand                 expand.grid            export                 extractROWS           
##  [41] findCompatibleOverlaps findOverlaps           findSpliceOverlaps     granges               
##  [45] grglist                head                   high2low               intersect             
##  [49] junctions              length                 lengths                mapFromAlignments     
##  [53] mapToAlignments        match                  mcols                  mcols<-               
##  [57] merge                  metadata               metadata<-             mstack                
##  [61] names                  names<-                narrow                 njunc                 
##  [65] overlapsAny            parallelSlotNames      pcompare               pintersect            
##  [69] pmapFromAlignments     pmapToAlignments       qnarrow                qwidth                
##  [73] ranges                 rank                   relist                 relistToClass         
##  [77] rename                 rep                    rep.int                replaceROWS           
##  [81] rev                    rglist                 rname                  rname<-               
##  [85] seqinfo                seqinfo<-              seqlevelsInUse         seqnames              
##  [89] seqnames<-             setdiff                setequal               shiftApply            
##  [93] show                   showAsCell             sort                   split                 
##  [97] split<-                start                  strand                 strand<-              
## [101] subset                 subsetByOverlaps       summarizeOverlaps      table                 
## [105] tail                   tapply                 union                  unique                
## [109] update                 updateObject           values                 values<-              
## [113] width                  window                 window<-               with                  
## [117] xtabs                  xtfrm                 
## see '?methods' for accessing help and source codeCaveat emptor: BAM files are large. Normally you will restrict the input to particular genomic ranges, or iterate through the BAM file. Key Bioconductor functions (e.g., GenomicAlignments::summarizeOverlaps() do this data management step for you. See next section!
Acknowledgements
The research reported in this presentation was supported by the National Cancer Institute and the National Human Genome Research Institute of the National Institutes of Health under Award numbers U24CA180996 and U41HG004059, and the National Science Foundation under Award number 1247813. The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health or the National Science Foundation.
sessionInfo()sessionInfo()
## R version 3.3.0 (2016-05-03)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 14.04.4 LTS
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8       
##  [4] LC_COLLATE=C               LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
## [10] LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
##  [1] grid      stats4    parallel  stats     graphics  grDevices utils     datasets  methods  
## [10] base     
## 
## other attached packages:
##  [1] airway_0.107.2                          BioC2016Introduction_0.0.3             
##  [3] Homo.sapiens_1.3.1                      GO.db_3.3.0                            
##  [5] OrganismDbi_1.15.1                      AnnotationHub_2.5.4                    
##  [7] Gviz_1.17.4                             biomaRt_2.29.2                         
##  [9] org.Hs.eg.db_3.3.0                      BiocParallel_1.7.4                     
## [11] TxDb.Hsapiens.UCSC.hg19.knownGene_3.2.2 GenomicFeatures_1.25.14                
## [13] AnnotationDbi_1.35.3                    VariantAnnotation_1.19.2               
## [15] RNAseqData.HNRNPC.bam.chr14_0.11.0      GenomicAlignments_1.9.4                
## [17] Rsamtools_1.25.0                        SummarizedExperiment_1.3.5             
## [19] Biobase_2.33.0                          BSgenome.Hsapiens.UCSC.hg19_1.4.0      
## [21] BSgenome_1.41.2                         rtracklayer_1.33.7                     
## [23] GenomicRanges_1.25.8                    GenomeInfoDb_1.9.1                     
## [25] Biostrings_2.41.4                       XVector_0.13.2                         
## [27] IRanges_2.7.11                          S4Vectors_0.11.7                       
## [29] BiocGenerics_0.19.1                     ggplot2_2.1.0                          
## [31] BiocStyle_2.1.10                       
## 
## loaded via a namespace (and not attached):
##  [1] httr_1.2.0                    splines_3.3.0                 Formula_1.2-1                
##  [4] shiny_0.13.2                  interactiveDisplayBase_1.11.3 latticeExtra_0.6-28          
##  [7] RBGL_1.49.1                   yaml_2.1.13                   RSQLite_1.0.0                
## [10] lattice_0.20-33               biovizBase_1.21.0             chron_2.3-47                 
## [13] digest_0.6.9                  RColorBrewer_1.1-2            colorspace_1.2-6             
## [16] htmltools_0.3.5               httpuv_1.3.3                  Matrix_1.2-6                 
## [19] plyr_1.8.4                    XML_3.98-1.4                  zlibbioc_1.19.0              
## [22] xtable_1.8-2                  scales_0.4.0                  nnet_7.3-12                  
## [25] survival_2.39-4               magrittr_1.5                  mime_0.4                     
## [28] evaluate_0.9                  foreign_0.8-66                graph_1.51.0                 
## [31] BiocInstaller_1.23.4          tools_3.3.0                   data.table_1.9.6             
## [34] formatR_1.4                   matrixStats_0.50.2            stringr_1.0.0                
## [37] munsell_0.4.3                 cluster_2.0.4                 ensembldb_1.5.8              
## [40] RCurl_1.95-4.8                dichromat_2.0-0               bitops_1.0-6                 
## [43] labeling_0.3                  rmarkdown_0.9.6               gtable_0.2.0                 
## [46] codetools_0.2-14              DBI_0.4-1                     reshape2_1.4.1               
## [49] R6_2.1.2                      gridExtra_2.2.1               knitr_1.13                   
## [52] Hmisc_3.17-4                  stringi_1.1.1                 Rcpp_0.12.5                  
## [55] rpart_4.1-10                  acepack_1.3-3.3