[d90d15]: / preprocessing_scr / microarrays.ipynb

Download this file

597 lines (596 with data), 23.2 kB

{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "==========================================================================\n",
      "*\n",
      "*  Package WGCNA 1.64.1 loaded.\n",
      "*\n",
      "*    Important note: It appears that your system supports multi-threading,\n",
      "*    but it is not enabled within WGCNA in R. \n",
      "*    To allow multi-threading within WGCNA with all available cores, use \n",
      "*\n",
      "*          allowWGCNAThreads()\n",
      "*\n",
      "*    within R. Use disableWGCNAThreads() to disable threading if necessary.\n",
      "*    Alternatively, set the following environment variable on your system:\n",
      "*\n",
      "*          ALLOW_WGCNA_THREADS=<number_of_processors>\n",
      "*\n",
      "*    for example \n",
      "*\n",
      "*          ALLOW_WGCNA_THREADS=4\n",
      "*\n",
      "*    To set the environment variable in linux bash shell, type \n",
      "*\n",
      "*           export ALLOW_WGCNA_THREADS=4\n",
      "*\n",
      "*     before running R. Other operating systems or shells will\n",
      "*     have a similar command to achieve the same aim.\n",
      "*\n",
      "==========================================================================\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "suppressPackageStartupMessages(library(\"affy\"))\n",
    "suppressPackageStartupMessages(library(\"affyio\"))\n",
    "suppressPackageStartupMessages(library(\"biomaRt\"))\n",
    "#remove.packages(\"GEOquery\")\n",
    "#library(devtools)\n",
    "#install_github('seandavi/GEOquery',force = TRUE)\n",
    "suppressPackageStartupMessages(library(\"GEOquery\"))\n",
    "suppressPackageStartupMessages(library(\"WGCNA\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Clinical trials cohorts\n",
    "\n",
    "###  GSE6434, GSE18864, GSE25055, GSE25065, GSE33072  \n",
    "    - download raw CEL files via GEOquery\n",
    "    - get array type and download corresponding CDF (probe layout)\n",
    "    - read and preprocess intensities with justRMA()\n",
    "    - annotate probe names with genes \n",
    "    - aggregate intensities to per-gene level\n",
    "    - TODO: QC plots to compare intensity distributions and MA-plot; remove QC-failed samples\n",
    "    \n",
    "    \n",
    "###  GSE9782 has two essential differences:\n",
    " 1). Authors provided no CEL files:\"Data was normalized to a Ttimmed mean of 15o and is NOT log transformed\". Therefore, we only log2-transform the data. \n",
    " \n",
    " 2). For each sample two microarrays two chips available Affymetrix 133A and B. In this version we analyze them independently, although they designed to cover mostly different genes. We apply biomaRt to convert \n",
    "\n",
    "\n",
    "\n",
    "# GDSC-micro \n",
    "\n",
    "Raw data available at ArrayExpress E-MTAB-3610 https://www.ebi.ac.uk/arrayexpress/experiments/E-MTAB-3610/files/raw/\n",
    "in 25 separate zip archives.\n",
    "\n",
    "```bash\n",
    "mkdir -p E-MTAB-3610;\n",
    "cd E-MTAB-3610;\n",
    "for i in `seq 1 25`; do\n",
    " wget https://www.ebi.ac.uk/arrayexpress/files/E-MTAB-3610/E-MTAB-3610.raw.$i.zip --quiet;\n",
    " unzip E-MTAB-3610.raw.$i.zip;\n",
    " rm E-MTAB-3610.raw.$i.zip;\n",
    "done\n",
    "cd .. ```\n",
    "\n",
    "# CCLE-micro\n",
    "* GSE36133 - the same processing pipeline as for clinical trial datasets \n",
    "\n",
    "### Results: \n",
    " <data_root_dir>/preprocessed/exprs/<base_name>.justRMAlog2Average.EntrezGene.Expr.tsv\n",
    " \n",
    " OR\n",
    " \n",
    " <data_root_dir>/preprocessed/exprs/GSE9782.MAS5log2Average.EntrezGene.Expr.tsv\n",
    " \n",
    " \n",
    "#### Tutorials:\n",
    "https://github.com/obigriffith/biostar-tutorials/blob/master/MakeCdfEnv/MakeCdfEnv_example.R\n",
    "https://github.com/icnn/Microarray-Tutorials/wiki/Affymetrix#2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "###### set these variables: ######\n",
    "# where to download raw data:\n",
    "raw_data_root_dir <- \"/home/olya/SFU/Hossein/arrays/\"\n",
    "# where to write preprocessed files \n",
    "preprocessed_data_dir <- \"/home/olya/SFU/Hossein/v1/preprocessed/exprs/\"\n",
    "# whether to download CEL files; FALSE if *CEL.gz files are already in raw_data_root_dir/GEO_ID/\n",
    "download_and_unpack <- TRUE\n",
    "# BrainArray version; 22.0.0 is the latest; versions 17 and 15 were used in related works \n",
    "BrainArray_version <- '22.0.0'\n",
    "for (dir in c(preprocessed_data_dir,raw_data_root_dir)){\n",
    "    if (! file.exists(dir)){ \n",
    "        dir.create(file.path(dir),recursive =TRUE)\n",
    "    }\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "myboxplot <- function(eset,title){\n",
    " options(repr.plot.width=10, repr.plot.height=4)\n",
    " title <- paste0(title, '/', annotation(eset))\n",
    " boxplot(exprs(eset), boxwex=0.6, notch=T, main=title, outline=FALSE, las=2)\n",
    " #legend(\"topleft\", labels, fill=palette(),legend= c(1:7), bty=\"n\")\n",
    "}\n",
    "\n",
    "myhist <- function(eset,title = \"Histogram\", xlabel = \"RMAlog2\"){\n",
    " i=1 \n",
    " plot( density((exprs(eset)[,i]),na.rm=T),main = title, xlab=xlabel)\n",
    " for(i in 2:dim(exprs(eset))[2]){\n",
    "  lines(density((exprs(eset)[,i]),na.rm=T),)\n",
    " }\n",
    "}\n",
    "\n",
    "# convert files names to GSM sample names\n",
    "getSnames <- function(sname,file_ext=\".CEL.gz\"){\n",
    "    sname <- sub(file_ext, \"\", sname)\n",
    "    sname <- strsplit(sname,split=\"_\")\n",
    "    sname <- unlist(sname)[1]\n",
    "    return(sname)\n",
    "}\n",
    "\n",
    "getCDFname <- function(fname,dir=getwd()){\n",
    "    cel_header <-affyio::read.celfile.header(paste0(dir,fname))\n",
    "    cdfname <- cleancdfname(cel_header$cdfName)\n",
    "    cdf_basename <- sub(\"cdf\",\"\",cdfname)\n",
    "    return(cdf_basename)\n",
    "}\n",
    "downloadCELfromGEO <- function(GEO_id, raw_data_dir=NULL,download_and_unpack=TRUE,file_ext=\".CEL.gz\"){   \n",
    "    if (is.null(raw_data_dir)) {\n",
    "        raw_data_dir <- paste0(getwd(),GEO_id)\n",
    "    }\n",
    "    \n",
    "    # download CEL files from GEO \n",
    "    if (download_and_unpack){\n",
    "        if (! file.exists(raw_data_dir)){ \n",
    "            dir.create(file.path(raw_data_dir),recursive =TRUE)\n",
    "        }\n",
    "        message(c(\"Downloads raw CEL files using getGEOSuppFiles() into :\",raw_data_dir))\n",
    "        downloaded_files <- getGEOSuppFiles(GEO_id,makeDirectory = FALSE,baseDir = raw_data_dir)\n",
    "        # untar \n",
    "        CELarchive <- paste0(raw_data_dir,GEO_id,\"_RAW.tar\")\n",
    "        untar(CELarchive, exdir=raw_data_dir)\n",
    "        # remove archive \n",
    "        file.remove(CELarchive)\n",
    "    }\n",
    "    # list CEL files and get GSM* sample names from file names\n",
    "    fnames <- list.files(raw_data_dir ,pattern = file_ext)\n",
    "    snames <- lapply(fnames, getSnames)\n",
    "    snames <- unlist(snames)\n",
    "    cdf_basenames <- unique(unlist(lapply(fnames,getCDFname, dir=raw_data_dir))) \n",
    "    return(list(raw_data_dir=raw_data_dir,sample_names=snames,fnames=fnames,cdfnames=cdf_basenames))    \n",
    "}\n",
    "\n",
    "# download and install BrainArray files \n",
    "getBrainArrayFile <-  function(chipname,what,version=\"22.0.0\",gene_id_type=\"entrezg\", download_dir=getwd()){\n",
    "    fname <- paste0(chipname,gene_id_type,what,\"_\",version,\".tar.gz\")\n",
    "    link <- paste0(\"http://mbni.org/customcdf/\",version,\"/\",gene_id_type,\".download/\",fname)\n",
    "    #print(link)\n",
    "    fpath <- paste0(download_dir,fname)\n",
    "    download.file(link, destfile = fpath, method = \"wget\")\n",
    "    suppressWarnings(install.packages(fpath, repos = NULL, type=\"source\"))\n",
    "    libname <- paste0(chipname,gene_id_type,what)\n",
    "    suppressPackageStartupMessages(library(libname,character.only = T))\n",
    "    return(libname)\n",
    "}\n",
    "# for Ensembl:\n",
    "# entrezg -> ensg\n",
    "# .db -> probe\n",
    "installBrainArrayCDFandDB <- function(chipname,version=\"22.0.0\",gene_id_type=\"entrezg\", download_dir=getwd()){\n",
    "    if (chipname == \"hugene10stv1hs\"){\n",
    "        chipname <- \"hugene10sths\"\n",
    "        warning(\"hugene10stv1hs --> hugene10sths\")\n",
    "    }\n",
    "    \n",
    "    customCDFname <- getBrainArrayFile(chipname,\"cdf\",version=version,\n",
    "                            gene_id_type=gene_id_type, download_dir=download_dir)\n",
    "    # the same way for probe file\n",
    "    \n",
    "    customDBname <- getBrainArrayFile(chipname,\".db\",version=version,\n",
    "                                   gene_id_type=gene_id_type, download_dir=download_dir)\n",
    "    customProbe <- getBrainArrayFile(chipname,\"probe\",version=version,\n",
    "                                   gene_id_type=gene_id_type, download_dir=download_dir)\n",
    "    return (list(customCDFname=customCDFname, customDBname = customDBname,customProbe =customProbe ))\n",
    "}\n",
    "\n",
    "\n",
    "# map rownames of expression matrix to geneIDs, aggregate expressions to gene-level \n",
    "# and save .tsv files to the preprocessed_data_dir  \n",
    "annotateAndWrite <- function(exprs_rma,geneID,customDBname,basename){\n",
    "    anno <- select(get(customDBname), keytype=\"PROBEID\", columns=c(geneID),\n",
    "                   keys=row.names(exprs_rma))\n",
    "    # drop ids unmapped on probes\n",
    "    anno <- anno[!is.na(anno[,geneID]),]\n",
    "    # aggregate expressions to gene level\n",
    "    # actually, no CollapseRows() needed in case the mapping is one-to-one\n",
    "    CR <- WGCNA::collapseRows(exprs_rma, rowGroup = anno[,geneID],rowID = anno[,\"PROBEID\"],method=\"Average\")\n",
    "    exprs_rma_gene_level <- CR$datETcollapsed\n",
    "\n",
    "    outfile <- paste0(preprocessed_data_dir,basename,\".BrainArray.RMAlog2Average.\",geneID,\".Expr.tsv\")\n",
    "    write.table(exprs_rma_gene_level, file =outfile,na=\"\",quote = FALSE,sep=\"\\t\")\n",
    "}\n",
    "# MA-plot -- for QC\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###  GSE6434, GSE18864, GSE25065, GSE33072  and GSE36133 (subset of GSE36139, CCLE)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Downloads raw CEL files using getGEOSuppFiles() into :/home/olya/SFU/Hossein/arrays//GSE36133/\n",
      "'select()' returned 1:1 mapping between keys and columns\n",
      "\n",
      "'select()' returned 1:1 mapping between keys and columns\n",
      "Downloads raw CEL files using getGEOSuppFiles() into :/home/olya/SFU/Hossein/arrays//GSE33072/\n",
      "Warning message in installBrainArrayCDFandDB(paste0(raw_data$cdfnames[1], \"hs\"), :\n",
      "“hugene10stv1hs --> hugene10sths”'select()' returned 1:1 mapping between keys and columns\n",
      "'select()' returned 1:1 mapping between keys and columns\n",
      "Downloads raw CEL files using getGEOSuppFiles() into :/home/olya/SFU/Hossein/arrays//GSE25065/\n",
      "'select()' returned 1:1 mapping between keys and columns\n",
      "'select()' returned 1:1 mapping between keys and columns\n",
      "Downloads raw CEL files using getGEOSuppFiles() into :/home/olya/SFU/Hossein/arrays//GSE18864/\n",
      "'select()' returned 1:1 mapping between keys and columns\n",
      "'select()' returned 1:1 mapping between keys and columns\n",
      "Downloads raw CEL files using getGEOSuppFiles() into :/home/olya/SFU/Hossein/arrays//GSE6434/\n",
      "'select()' returned 1:1 mapping between keys and columns\n",
      "'select()' returned 1:1 mapping between keys and columns\n"
     ]
    }
   ],
   "source": [
    "for (GEO_ID in c(\"GSE36133\",\"GSE33072\",\"GSE25065\",\"GSE18864\",\"GSE6434\")){ \n",
    "    basename <- GEO_ID\n",
    "    raw_data_dir <- paste0(raw_data_root_dir,\"/\",GEO_ID,\"/\")\n",
    "\n",
    "    raw_data <- downloadCELfromGEO(GEO_ID, raw_data_dir=raw_data_dir,\n",
    "                                   download_and_unpack=download_and_unpack,file_ext=\".CEL.gz\")\n",
    "    \n",
    "    # download and install BrainArray CDF and annotations\n",
    "\n",
    "    customAnno <- installBrainArrayCDFandDB(paste0(raw_data$cdfnames[1],\"hs\"),version=BrainArray_version,\n",
    "                                            gene_id_type=\"entrezg\",download_dir=raw_data_root_dir)\n",
    "    # run RMA with custom CDF and obtain an 'ExpressionSet' object \n",
    "    \n",
    "    rma <- affy::justRMA(celfile.path=raw_data$raw_data_dir,filenames = raw_data$fnames,\n",
    "                                 sampleNames=raw_data$sample_names,verbose=FALSE,compress=FALSE,\n",
    "                                 cdfname=customAnno$customCDFname)\n",
    "    exprs_rma <- exprs(rma)\n",
    "\n",
    "\n",
    "    # annotate probeset ids with names and save file to the preprocessed_data_dir\n",
    "    for (geneID in c(\"ENTREZID\",\"SYMBOL\")){\n",
    "        #print(geneID)\n",
    "        annotateAndWrite(exprs_rma,geneID,customAnno$customDBname,basename)\n",
    "\n",
    "    }\n",
    "}\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# The process is slightly different for GDSC, because it is absent in GEO \n",
    "\n",
    "Raw data available at ArrayExpress E-MTAB-3610 https://www.ebi.ac.uk/arrayexpress/experiments/E-MTAB-3610/files/raw/\n",
    "in 25 separate zip archives.\n",
    "\n",
    "(Assume .CEL files are already in the cel_file_dir )\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "1018"
      ],
      "text/latex": [
       "1018"
      ],
      "text/markdown": [
       "1018"
      ],
      "text/plain": [
       "[1] 1018"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "'hgu219cdf'"
      ],
      "text/latex": [
       "'hgu219cdf'"
      ],
      "text/markdown": [
       "'hgu219cdf'"
      ],
      "text/plain": [
       "[1] \"hgu219cdf\""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<ol class=list-inline>\n",
       "\t<li>18653</li>\n",
       "\t<li>1018</li>\n",
       "</ol>\n"
      ],
      "text/latex": [
       "\\begin{enumerate*}\n",
       "\\item 18653\n",
       "\\item 1018\n",
       "\\end{enumerate*}\n"
      ],
      "text/markdown": [
       "1. 18653\n",
       "2. 1018\n",
       "\n",
       "\n"
      ],
      "text/plain": [
       "[1] 18653  1018"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "'select()' returned 1:1 mapping between keys and columns\n",
      "'select()' returned 1:1 mapping between keys and columns\n"
     ]
    }
   ],
   "source": [
    "basename <- \"GDSC_micro\"\n",
    "# specify raw data directory\n",
    "# replace this with download to raw_data_root_dir/E-MTAB-3610/\n",
    "cel_file_dir = \"/home/olya/SFU/Hossein/arrays/E-MTAB-3610/\"\n",
    "\n",
    "\n",
    "getSnames <- function(sname,ext=\".cel\"){\n",
    "    sname <- sub(ext, \"\", sname)\n",
    "    sname <- unlist(sname)[1]\n",
    "    return(sname)\n",
    "}\n",
    "fnames <- list.files(cel_file_dir ,pattern = \".cel\")\n",
    "snames <- lapply(fnames, getSnames)\n",
    "snames <- unlist(snames)\n",
    "# number of CEL files:\n",
    "length(snames)\n",
    "#get CDF names from platform names from CEL headers \n",
    "getCDFname <- function(fname,dir=getwd()){\n",
    "    cel_header <-affyio::read.celfile.header(paste0(dir,fname))\n",
    "    return(cleancdfname(cel_header$cdfName))\n",
    "}\n",
    "cdf_basenames <- unique(unlist(lapply(fnames,getCDFname, dir=cel_file_dir)))\n",
    "cdf_basenames \n",
    "# add processing of batches in future\n",
    "cdf_basename <- sub(\"cdf\",\"\",cdf_basenames[1])\n",
    "\n",
    "# load BrainArray\n",
    "customAnno <- installBrainArrayCDFandDB(paste0(cdf_basename,\"hs\"),version=BrainArray_version,\n",
    "                                        gene_id_type=\"entrezg\",download_dir=raw_data_root_dir)\n",
    "GDSC_rma <- affy::justRMA(celfile.path=cel_file_dir,filenames = fnames,sampleNames=snames,\n",
    "                     verbose=FALSE,compress=FALSE,cdfname=customAnno$customCDFname)\n",
    "\n",
    "GDSC_exprs <- exprs(GDSC_rma)\n",
    "dim(GDSC_exprs)\n",
    "# annotate probeset ids with names and save file to the preprocessed_data_dir\n",
    "for (geneID in c(\"ENTREZID\",\"SYMBOL\")){\n",
    "    annotateAndWrite(GDSC_exprs,geneID,customAnno$customDBname,basename)\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### GSE9782\n",
    "\n",
    "* no CEL files provided for this dataset\n",
    "* two expression matrices for A and B arrays:\n",
    "We use **biomaRt** to covert probeset IDs to Entrez gene ID\n",
    "    - GPL96 - \"affy_hg_u133a\"\n",
    "    - GPL97 - \"affy_hg_u133b\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "basename <- \"GSE9782\"\n",
    "platform2biomaRt <- list(\"GPL96\" = \"affy_hg_u133a\", \"GPL97\" = \"affy_hg_u133b\")\n",
    "\n",
    "ensembl75 <- useMart(host='feb2014.archive.ensembl.org', \n",
    "                     biomart='ENSEMBL_MART_ENSEMBL', \n",
    "                     dataset='hsapiens_gene_ensembl')\n",
    "\n",
    "tmp_file_dir <- paste0(raw_data_root_dir,basename)\n",
    "if (! file.exists(tmp_file_dir)){ \n",
    "    dir.create(file.path(tmp_file_dir),recursive =TRUE)\n",
    "}\n",
    "\n",
    "esets <- suppressMessages(getGEO(basename,destdir = tmp_file_dir))\n",
    "for (eset in esets){\n",
    "    # log-transform expression\n",
    "    exprs(eset) <-  log2(exprs(eset))\n",
    "    \n",
    "    # annotate and write file\n",
    "    identifier <- platform2biomaRt[[annotation(eset)]]\n",
    "    getinfo <- c(identifier, \"entrezgene\") #,'hgnc_symbol','external_gene_id')\n",
    "    anno <- biomaRt::getBM(attributes = getinfo, filters=identifier, values = rownames(exprs(eset)),mart=ensembl75)\n",
    "    anno <- anno[!is.na(anno$entrezgene),]\n",
    "    # keep unique rows\n",
    "    anno <- unique(anno)\n",
    "    # drop probes mappe to momre than one gene\n",
    "    anno <- anno[!duplicated(anno[,identifier]),]\n",
    "    \n",
    "    CR <- WGCNA::collapseRows(exprs(eset), rowGroup = anno$entrezgene, \n",
    "                   rowID = anno[,identifier],method=\"Average\")\n",
    "    write.table(CR$datETcollapsed, file = paste0(preprocessed_data_dir,basename,\"-\",annotation(eset),\".MAS5log2Average.ENTREZID.Expr.tsv\"),na=\"\",quote = FALSE,sep=\"\\t\")\n",
    "    #dim(CR$datETcollapsed)\n",
    "    #head(CR$datETcollapsed)\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "R version 3.5.0 (2018-04-23)\n",
       "Platform: x86_64-conda_cos6-linux-gnu (64-bit)\n",
       "Running under: Ubuntu 16.04.5 LTS\n",
       "\n",
       "Matrix products: default\n",
       "BLAS/LAPACK: /home/olya/miniconda2/lib/R/lib/libRblas.so\n",
       "\n",
       "locale:\n",
       " [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              \n",
       " [3] LC_TIME=de_DE.UTF-8        LC_COLLATE=en_US.UTF-8    \n",
       " [5] LC_MONETARY=de_DE.UTF-8    LC_MESSAGES=en_US.UTF-8   \n",
       " [7] LC_PAPER=de_DE.UTF-8       LC_NAME=C                 \n",
       " [9] LC_ADDRESS=C               LC_TELEPHONE=C            \n",
       "[11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C       \n",
       "\n",
       "attached base packages:\n",
       "[1] parallel  stats     graphics  grDevices utils     datasets  methods  \n",
       "[8] base     \n",
       "\n",
       "other attached packages:\n",
       "[1] GEOquery_2.47.18    biomaRt_2.32.1      affyio_1.46.0      \n",
       "[4] affy_1.54.0         Biobase_2.36.2      BiocGenerics_0.22.1\n",
       "\n",
       "loaded via a namespace (and not attached):\n",
       " [1] Rcpp_0.12.18          pillar_1.3.0          bindr_0.1.1          \n",
       " [4] BiocInstaller_1.26.1  compiler_3.5.0        bitops_1.0-6         \n",
       " [7] base64enc_0.1-3       tools_3.5.0           zlibbioc_1.22.0      \n",
       "[10] digest_0.6.17         uuid_0.1-2            bit_1.1-14           \n",
       "[13] tibble_1.4.2          jsonlite_1.5          evaluate_0.11        \n",
       "[16] RSQLite_2.1.1         memoise_1.1.0         preprocessCore_1.38.1\n",
       "[19] pkgconfig_2.0.2       rlang_0.2.2           IRdisplay_0.6        \n",
       "[22] DBI_1.0.0             IRkernel_0.8.11       bindrcpp_0.2.2       \n",
       "[25] xml2_1.2.0            dplyr_0.7.6           repr_0.15.0          \n",
       "[28] stringr_1.3.1         hms_0.4.2             S4Vectors_0.14.7     \n",
       "[31] IRanges_2.10.5        tidyselect_0.2.4      stats4_3.5.0         \n",
       "[34] bit64_0.9-7           glue_1.3.0            R6_2.2.2             \n",
       "[37] AnnotationDbi_1.38.2  XML_3.98-1.16         limma_3.32.10        \n",
       "[40] pbdZMQ_0.3-3          tidyr_0.8.1           readr_1.1.1          \n",
       "[43] purrr_0.2.5           blob_1.1.1            magrittr_1.5         \n",
       "[46] htmltools_0.3.6       assertthat_0.2.0      stringi_1.2.4        \n",
       "[49] RCurl_1.95-4.11       crayon_1.3.4         "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sessionInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "R",
   "language": "R",
   "name": "ir"
  },
  "language_info": {
   "codemirror_mode": "r",
   "file_extension": ".r",
   "mimetype": "text/x-r-source",
   "name": "R",
   "pygments_lexer": "r",
   "version": "3.5.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}