2018-08-18
使用GEOquery包
肖恩戴维斯
2014年9月21日
4转换为BioConductor ExpressionSets和limma MALists
4.1将 GSE Series Matrix文件作为ExpressionSet获取
1 GEO概述
NCBI Gene Expression Omnibus(GEO)作为各种高通量实验数据的公共存储库。这些数据包括基于单通道和双通道微阵列的实验,测量mRNA,基因组DNA和蛋白质丰度,以及非阵列技术,如基因表达系列分析(SAGE),质谱蛋白质组学数据和高通量测序数据。
在GEO最基本的组织层面,有四种基本实体类型。前三个(样本,平台和系列)由用户提供; 第四,数据集由GEO工作人员根据用户提交的数据进行编译和策划。有关更多信息,请参阅GEO主页。
1.1平台
平台记录描述阵列上的元件列表(例如,cDNA,寡核苷酸探针组,ORF,抗体)或可在该实验中检测和定量的元件列表(例如,SAGE标签,肽)。每个平台记录都分配有唯一且稳定的GEO登录号(GPLxxx)。平台可以引用多个提交者提交的许多样本。
1.2样品
样品记录描述了处理单个样品的条件,它经历的操作以及从中得到的每个元素的丰度测量。每个样品记录都分配有唯一且稳定的GEO登录号(GSMxxx)。Sample实体必须仅引用一个Platform,并且可以包含在多个Series中。
1.3系列
系列记录定义了一组被认为是组的一部分的相关样本,样本如何相关,以及它们是否以及如何排序。A系列提供了整个实验的焦点和描述。系列记录还可能包含描述提取数据,摘要结论或分析的表格。每个系列记录都分配有唯一且稳定的GEO登记号(GSExxx)。系列记录有几种格式,由GEOquery独立处理。较小的和新的GSEMatrix文件解析起来非常快; GEOquery使用一个简单的标志来选择使用GSEMatrix文件(见下文)。
1.4数据集
GEO DataSet(GDSxxx)是GEO样本数据的精选集合。GDS记录代表了一系列具有生物学和统计学意义的GEO样本,构成了GEO数据显示和分析工具套件的基础。GDS中的样本指的是同一个平台,也就是说,它们共享一组共同的探测元素。假设GDS中每个样本的值测量值以等效方式计算,即背景处理和标准化等考虑因素在整个数据集中是一致的。通过GDS子集提供反映实验设计的信息。
2使用GEOquery入门
从GEO获取数据非常简单。只需要一个命令,getGEO。这一函数解释其输入以确定如何从GEO获取数据,然后将数据解析为有用的R数据结构。用法很简单。这会加载GEOquery库。
现在,我们可以自由访问任何GEO加入。请注意,在下面,我使用与GEOquery包一起打包的文件。通常,您将仅使用GEO加入,如代码注释中所述。
# If you have network access, the more typical way to do this# would be to use this:# gds <- getGEO("GDS507")gds <- getGEO(filename=system.file("extdata/GDS507.soft.gz",package="GEOquery"))
现在,gds包含GDS代表GEO的GDS507条目的R数据结构(类)。您会注意到用于存储下载的文件名已输出到屏幕(但不保存在任何地方),以便以后用于调用getGEO(filename=...)。
我们可以对任何其他GEO加入进行相同的操作,例如GSM11805GEO样本。
# If you have network access, the more typical way to do this# would be to use this:# gds <- getGEO("GSM11805")gsm <- getGEO(filename=system.file("extdata/GSM11805.txt.gz",package="GEOquery"))
3 GEOquery数据结构
GEOquery数据结构实际上有两种形式。第一个,包含GDS,GPL和GSM所有行为相似,访问者对每个都有类似的影响。第四个GEOquery数据结构,GSE是由对象GSM和GPL对象组合而成的复合数据类型。我将首先解释前三个。
3.1 GDS,GSM和GPL类
这些类中的每一个都包含一个元数据头(几乎从SOFT格式标题中逐字逐句)和一个GEODataTable。GEODataTable有两个简单的部分,一个Columns部分,用于描述Table部分的列标题。show每个班级还有一种方法。例如,使用上面的gsm:
# Look at gsm metadata:head(Meta(gsm))
## $channel_count## [1] "1"#### $comment## [1] "Raw data provided as supplementary file"#### $contact_address## [1] "715 Albany Street, E613B"#### $contact_city## [1] "Boston"#### $contact_country## [1] "USA"#### $contact_department## [1] "Genetics and Genomics"
# Look at data associated with the GSM:# but restrict to only first 5 rows, for brevityTable(gsm)[1:5,]
## ID_REF VALUE ABS_CALL## 1 AFFX-BioB-5_at 953.9 P## 2 AFFX-BioB-M_at 2982.8 P## 3 AFFX-BioB-3_at 1657.9 P## 4 AFFX-BioC-5_at 2652.7 P## 5 AFFX-BioC-3_at 2019.5 P
# Look at Column descriptions:Columns(gsm)
## Column## 1 ID_REF## 2 VALUE## 3 ABS_CALL## Description## 1## 2 MAS 5.0 Statistical Algorithm (mean scaled to 500)## 3 MAS 5.0 Absent, Marginal, Present call with Alpha1 = 0.05, Alpha2 = 0.065
在GPL类的行为完全一样的GSM类。但是,GDS该类具有与该Columns方法相关的更多信息:
## sample disease.state individual## 1 GSM11815 RCC 035## 2 GSM11832 RCC 023## 3 GSM12069 RCC 001## 4 GSM12083 RCC 005## 5 GSM12101 RCC 011## 6 GSM12106 RCC 032## 7 GSM12274 RCC 2## 8 GSM12299 RCC 3## 9 GSM12412 RCC 4## 10 GSM11810 normal 035## 11 GSM11827 normal 023## 12 GSM12078 normal 001## 13 GSM12099 normal 005## 14 GSM12269 normal 1## 15 GSM12287 normal 2## 16 GSM12301 normal 3## 17 GSM12448 normal 4
3.2 GSE课程
该GSE实体是GEO实体中最混乱的。GSE条目可以表示在任意数量的平台上运行的任意数量的样本。该GSE班有一个元数据部分,就像其他类。但是,它没有GEODataTable。相反,它包含两个列表,可以使用GPLList和GSMList方法访问,每个列表都包含对象GPL和列表GSM。举个例子:
# Again, with good network access, one would do:# gse <- getGEO("GSE781",GSEMatrix=FALSE)gse <- getGEO(filename=system.file("extdata/GSE781_family.soft.gz",package="GEOquery"))head(Meta(gse))
## $contact_address## [1] "715 Albany Street, E613B"#### $contact_city## [1] "Boston"#### $contact_country## [1] "USA"#### $contact_department## [1] "Genetics and Genomics"#### $contact_email## [1] "mlenburg@bu.edu"#### $contact_fax## [1] "617-414-1646"
# names of all the GSM objects contained in the GSEnames(GSMList(gse))
## [1] "GSM11805" "GSM11810" "GSM11814" "GSM11815" "GSM11823" "GSM11827"## [7] "GSM11830" "GSM11832" "GSM12067" "GSM12069" "GSM12075" "GSM12078"## [13] "GSM12079" "GSM12083" "GSM12098" "GSM12099" "GSM12100" "GSM12101"## [19] "GSM12105" "GSM12106" "GSM12268" "GSM12269" "GSM12270" "GSM12274"## [25] "GSM12283" "GSM12287" "GSM12298" "GSM12299" "GSM12300" "GSM12301"## [31] "GSM12399" "GSM12412" "GSM12444" "GSM12448"
# and get the first GSM object on the listGSMList(gse)[[1]]
## An object of class "GSM"## channel_count## [1] "1"## comment## [1] "Raw data provided as supplementary file"## contact_address## [1] "715 Albany Street, E613B"## contact_city## [1] "Boston"## contact_country## [1] "USA"## contact_department## [1] "Genetics and Genomics"## contact_email## [1] "mlenburg@bu.edu"## contact_fax## [1] "617-414-1646"## contact_institute## [1] "Boston University School of Medicine"## contact_name## [1] "Marc,E.,Lenburg"## contact_phone## [1] "617-414-1375"## contact_state## [1] "MA"## contact_web_link## [1] "http://gg.bu.edu"## contact_zip/postal_code## [1] "02130"## data_row_count## [1] "22283"## description## [1] "Age = 70; Gender = Female; Right Kidney; Adjacent Tumor Type = clear cell; Adjacent Tumor Fuhrman Grade = 3; Adjacent Tumor Capsule Penetration = true; Adjacent Tumor Perinephric Fat Invasion = true; Adjacent Tumor Renal Sinus Invasion = false; Adjacent Tumor Renal Vein Invasion = true; Scaling Target = 500; Scaling Factor = 7.09; Raw Q = 2.39; Noise = 2.60; Background = 55.24."## [2] "Keywords = kidney"## [3] "Keywords = renal"## [4] "Keywords = RCC"## [5] "Keywords = carcinoma"## [6] "Keywords = cancer"## [7] "Lot batch = 2004638"## geo_accession## [1] "GSM11805"## last_update_date## [1] "May 28 2005"## molecule_ch1## [1] "total RNA"## organism_ch1## [1] "Homo sapiens"## platform_id## [1] "GPL96"## series_id## [1] "GSE781"## source_name_ch1## [1] "Trizol isolation of total RNA from normal tissue adjacent to Renal Cell Carcinoma"## status## [1] "Public on Nov 25 2003"## submission_date## [1] "Oct 20 2003"## supplementary_file## [1] "ftp://ftp.ncbi.nih.gov/pub/geo/DATA/supplementary/samples/GSM11nnn/GSM11805/GSM11805.CEL.gz"## title## [1] "N035 Normal Human Kidney U133A"## type## [1] "RNA"## An object of class "GEODataTable"## ****** Column Descriptions ******## Column## 1 ID_REF## 2 VALUE## 3 ABS_CALL## Description## 1## 2 MAS 5.0 Statistical Algorithm (mean scaled to 500)## 3 MAS 5.0 Absent, Marginal, Present call with Alpha1 = 0.05, Alpha2 = 0.065## ****** Data Table ******## ID_REF VALUE ABS_CALL## 1 AFFX-BioB-5_at 953.9 P## 2 AFFX-BioB-M_at 2982.8 P## 3 AFFX-BioB-3_at 1657.9 P## 4 AFFX-BioC-5_at 2652.7 P## 5 AFFX-BioC-3_at 2019.5 P## 22278 more rows ...
# and the names of the GPLs representednames(GPLList(gse))
## [1] "GPL96" "GPL97"
请参阅下文,了解获取GSE信息的其他首选方法。
4转换为BioConductor ExpressionSets和limma MALists
GEO数据集(不像其他一些地理实体的),比较相似limma的数据结构MAList,并为Biobase数据结构ExpressionSet。因此,有两个功能,GDS2MA并且GDS2eSet是完成这项任务。
4.1将 GSE Series Matrix文件作为ExpressionSet获取
GEO系列是相关实验的集合。除了可用作非常大的SOFT格式文件外,NCBI GEO还根据制表符分隔的文本准备了一个更简单的格式文件。该getGEO函数可以处理这种格式,并且可以非常快速地解析非常大的GSE。从此解析返回的数据结构是ExpressionSets列表。例如,我们下载并解析GSE2553。
# Note that GSEMatrix=TRUE is the defaultgse2553 <- getGEO('GSE2553',GSEMatrix=TRUE)show(gse2553)
## $GSE2553_series_matrix.txt.gz## ExpressionSet (storageMode: lockedEnvironment)## assayData: 12600 features, 181 samples## element names: exprs## protocolData: none## phenoData## sampleNames: GSM48681 GSM48682 ... GSM48861 (181 total)## varLabels: title geo_accession ... data_row_count (30 total)## varMetadata: labelDescription## featureData## featureNames: 1 2 ... 12600 (12600 total)## fvarLabels: ID PenAt ... Chimeric_Cluster_IDs (13 total)## fvarMetadata: Column Description labelDescription## experimentData: use 'experimentData(object)'## Annotation: GPL1977
show(pData(phenoData(gse2553[[1]]))[1:5,c(1,6,8)])
## title## GSM48681 Patient sample ST18, Dermatofibrosarcoma## GSM48682 Patient sample ST410, Ewing Sarcoma## GSM48683 Patient sample ST130, Sarcoma, NOS## GSM48684 Patient sample ST293, Malignant Peripheral Nerve Sheath Tumor## GSM48685 Patient sample ST367, Liposarcoma## type source_name_ch1## GSM48681 RNA Dermatofibrosarcoma## GSM48682 RNA Ewing Sarcoma## GSM48683 RNA Sarcoma, NOS## GSM48684 RNA Malignant Peripheral Nerve Sheath Tumor## GSM48685 RNA Liposarcoma
4.2将GDS转换为ExpressionSet
gds从上面看我们的对象,我们可以简单地做:
eset <- GDS2eSet(gds,do.log2=TRUE)
现在,eset是一个ExpressionSet包含相同的信息作为GEO数据集,包括样品信息,我们可以在这里看到:
## ExpressionSet (storageMode: lockedEnvironment)## assayData: 22645 features, 17 samples## element names: exprs## protocolData: none## phenoData## sampleNames: GSM11815 GSM11832 ... GSM12448 (17 total)## varLabels: sample disease.state individual description## varMetadata: labelDescription## featureData## featureNames: 200000_s_at 200001_at ... AFFX-TrpnX-M_at (22645## total)## fvarLabels: ID Gene title ... GO:Component ID (21 total)## fvarMetadata: Column labelDescription## experimentData: use 'experimentData(object)'## pubMedIds: 14641932## Annotation:
## sample disease.state individual## GSM11815 GSM11815 RCC 035## GSM11832 GSM11832 RCC 023## GSM12069 GSM12069 RCC 001## GSM12083 GSM12083 RCC 005## GSM12101 GSM12101 RCC 011## GSM12106 GSM12106 RCC 032## GSM12274 GSM12274 RCC 2## GSM12299 GSM12299 RCC 3## GSM12412 GSM12412 RCC 4## GSM11810 GSM11810 normal 035## GSM11827 GSM11827 normal 023## GSM12078 GSM12078 normal 001## GSM12099 GSM12099 normal 005## GSM12269 GSM12269 normal 1## GSM12287 GSM12287 normal 2## GSM12301 GSM12301 normal 3## GSM12448 GSM12448 normal 4
4.3将GDS转换为MAList
没有注释信息(由GEO称为平台信息),因为ExpressionSet通常不包含基因信息的插槽。但是,很容易获得这些信息。首先,我们需要知道这个GDS使用的平台。然后,另一个电话getGEO会给我们提供我们需要的东西。
#get the platform from the GDS metadataMeta(gds)$platform
## [1] "GPL97"
#So use this information in a call to getGEOgpl <- getGEO(filename=system.file("extdata/GPL97.annot.gz",package="GEOquery"))
所以,gpl现在包含GEO的GPL5信息。与ExpressionSetlimma 不同,limma MAList存储基因注释信息,因此我们可以在调用中使用我们新创建gpl的类GPL,GDS2MA如下所示:
MA <- GDS2MA(gds,GPL=gpl)class(MA)
## [1] "MAList"## attr(,"package")## [1] "limma"
现在,MA它MAList不仅包含数据,还包含与GDS507相关的样本信息和基因信息。
4.4将GSE转换为ExpressionSet
首先,确保使用上面“将GSE系列矩阵文件作为表达式集获取”部分中描述的方法来使用GSE Series Matrix文件不足以完成任务,因为它更快更简单。如果不是(即,需要来自每个GSM的其他列),则将需要该方法。
转换GSE对象到ExpressionSet对象目前采用比特的R数据操纵由于可存储在所述变化数据GSE和底层GSM和GPL对象。但是,使用一个简单的例子有望说明该技术。
首先,我们需要确保所有这些GSMs都来自同一平台:
gsmplatforms <- lapply(GSMList(gse),function(x) {Meta(x)$platform_id})head(gsmplatforms)
## $GSM11805## [1] "GPL96"#### $GSM11810## [1] "GPL97"#### $GSM11814## [1] "GPL96"#### $GSM11815## [1] "GPL97"#### $GSM11823## [1] "GPL96"#### $GSM11827## [1] "GPL97"
实际上,有两个GPL,GPL96和GPL97,作为他们的平台(我们可以通过查看GPLList来确定gse)。我们可以过滤原始GSMList以仅包含具有GPL96平台的那些GSM并使用该列表进行进一步处理
gsmlist = Filter(function(gsm) {Meta(gsm)$platform_id=='GPL96'},GSMList(gse))length(gsmlist)
## [1] 17
所以,现在我们想知道哪个列代表我们想要提取的数据。查看单个GSM表的前几行可能会给我们一个想法(顺便说一句,GEO使用一种惯例,即每个数组包含单个测量的VALUE列称为列,如果我们可以使用,我们不知道其他哪一栏最相关)。
## ID_REF VALUE ABS_CALL## 1 AFFX-BioB-5_at 953.9 P## 2 AFFX-BioB-M_at 2982.8 P## 3 AFFX-BioB-3_at 1657.9 P## 4 AFFX-BioC-5_at 2652.7 P## 5 AFFX-BioC-3_at 2019.5 P
# and get the column descriptionsColumns(gsmlist[[1]])[1:5,]
## Column## 1 ID_REF## 2 VALUE## 3 ABS_CALL## NA ## NA.1 ## Description## 1## 2 MAS 5.0 Statistical Algorithm (mean scaled to 500)## 3 MAS 5.0 Absent, Marginal, Present call with Alpha1 = 0.05, Alpha2 = 0.065## NA ## NA.1
我们确实会使用这个VALUE专栏。然后我们想要制作这些值的矩阵,如下所示:
# get the probeset orderingprobesets <- Table(GPLList(gse)[[1]])$ID# make the data matrix from the VALUE columns from each GSM# being careful to match the order of the probesets in the platform# with those in the GSMsdata.matrix <- do.call('cbind',lapply(gsmlist,function(x){tab <- Table(x)mymatch <- match(probesets,tab$ID_REF)return(tab$VALUE[mymatch]) }))data.matrix <- apply(data.matrix,2,function(x) {as.numeric(as.character(x))})data.matrix <- log2(data.matrix)data.matrix[1:5,]
## GSM11805 GSM11814 GSM11823 GSM11830 GSM12067 GSM12075 GSM12079## [1,] 10.926963 11.105254 11.275019 11.438636 11.424376 11.222795 11.469845## [2,] 5.749534 7.908092 7.093814 7.514122 7.901470 6.407693 5.165912## [3,] 7.066089 7.750205 7.244126 7.962896 7.337176 6.569856 7.477354## [4,] 12.660353 12.479755 12.215897 11.458355 11.397568 12.529870 12.240046## [5,] 6.195741 6.061776 6.565293 6.583459 6.877744 6.652486 3.981853## GSM12098 GSM12100 GSM12105 GSM12268 GSM12270 GSM12283 GSM12298## [1,] 10.823367 10.835971 10.810893 11.062653 10.323055 11.181028 11.566387## [2,] 6.556123 8.207014 6.816344 6.563768 7.353147 5.770829 6.912889## [3,] 7.708739 7.428779 7.754888 7.126188 8.742815 7.339850 7.602142## [4,] 12.336534 11.762839 11.237509 12.412490 11.213408 12.678380 12.232901## [5,] 5.501439 6.247928 6.017922 6.525129 6.683696 5.918863 5.837943## GSM12300 GSM12399 GSM12444## [1,] 11.078151 11.535178 11.105450## [2,] 4.812498 7.471675 7.488644## [3,] 7.383704 7.432959 7.381110## [4,] 12.090939 11.421802 12.172834## [5,] 6.281698 5.419539 5.469235
请注意,我们这样做是match为了确保值和平台信息的顺序相同。最后,制作ExpressionSet对象:
require(Biobase)# go through the necessary steps to make a compliant ExpressionSetrownames(data.matrix) <- probesetscolnames(data.matrix) <- names(gsmlist)pdata <- data.frame(samples=names(gsmlist))rownames(pdata) <- names(gsmlist)pheno <- as(pdata,"AnnotatedDataFrame")eset2 <- new('ExpressionSet',exprs=data.matrix,phenoData=pheno)eset2
## ExpressionSet (storageMode: lockedEnvironment)## assayData: 22283 features, 17 samples## element names: exprs## protocolData: none## phenoData## sampleNames: GSM11805 GSM11814 ... GSM12444 (17 total)## varLabels: samples## varMetadata: labelDescription## featureData: none## experimentData: use 'experimentData(object)'## Annotation:
因此,使用lapplyGSMList 的组合,可以根据需要提取尽可能多的感兴趣的列来构建所选择的数据结构。因为来自GEO网站的GSM数据被完全下载并包含在GSE对象中,所以例如可以提取双通道阵列的前景和背景以及质量。获取数组注释也有点复杂,但通过在lapply调用中替换“platform”来获取每个数组的平台信息,可以获得与每个数组相关的其他信息。
5从GEO访问原始数据
NCBI GEO接受(但并非总是需要)原始数据,如.CEL文件,.CDF文件,图像等。有时,快速访问此类数据很有用。单个函数getGEOSuppFiles可以将GEO登录作为参数,并将下载与该登录关联的所有原始数据。默认情况下,该函数将在当前工作目录中创建一个目录,以存储所选GEO登录的原始数据。结合简单的sapply语句或其他循环结构,getGEOSuppFiles可以非常简单地快速轻松地获取原始数据,而无需了解GEO原始数据URL的具体信息。
6个用例
GEOquery可以非常强大,可以快速收集大量数据。一些示例可用于说明如何为数据挖掘目的进行此操作。
6.1获取给定平台的所有系列记录
出于数据挖掘的目的,有时能够为给定平台提取所有GSE记录。GEOquery使这很容易,但是开始时需要对GPL记录有一点了解。GPL记录包含引用它的GSE和GSM加入。一些代码有助于说明这一点:
gpl97 <- getGEO('GPL97')Meta(gpl97)$title
## [1] "[HG-U133B] Affymetrix Human Genome U133B Array"
## [1] "GSE362" "GSE473" "GSE620" "GSE674" "GSE781" "GSE907"
## [1] 163
## [1] "GSM3922" "GSM3924" "GSM3926" "GSM3928" "GSM3930" "GSM3932"
## [1] 7877
上面的代码将GPL97记录加载到R.Meta方法从GPL记录中提取标题信息列表。在title给该平台的人的名字。在series_id给出一系列ID的向量。请注意,此平台有163个系列和7877个样本。可以使用以下代码下载所有样本或系列。我只展示前5个样本作为例子:
gsmids <- Meta(gpl97)$sample_idgsmlist <- sapply(gsmids[1:5],getGEO)names(gsmlist)
## [1] "GSM3922" "GSM3924" "GSM3926" "GSM3928" "GSM3930"
7结论
GEOquery包为NCBI GEO存储库中包含的大量阵列资源提供了桥梁。通过保持GEO数据的丰富性而不是仅仅关注“数字”,可以将GEO数据集成到当前的Bioconductor数据结构中,并且可以非常快速,轻松地对该数据进行分析。希望这些工具能够更全面地向阵列社区开放GEO数据。
7.1引用GEOquery
如果用于支持您自己的研究,请考虑引用GEOquery:
#### Please cite the following if utilizing the GEOquery software:#### Davis, S. and Meltzer, P. S. GEOquery: a bridge between the Gene## Expression Omnibus (GEO) and BioConductor. Bioinformatics, 2007,## 14, 1846-1847#### A BibTeX entry for LaTeX users is#### @Article{,## author = {Sean Davis and Paul Meltzer},## title = {GEOquery: a bridge between the Gene Expression Omnibus (GEO) and BioConductor},## journal = {Bioinformatics},## year = {2007},## volume = {14},## pages = {1846--1847},## }
7.2报告问题或错误
如果您在使用GEOquery时遇到问题,Bioconductor支持网站是寻求帮助的第一个好地方。如果您确信GEOquery中存在错误(这是非常不寻常的,但并非闻所未闻),请随时在GEOquery github站点上提交问题或直接从R提交错误报告(将打开一个新的github问题) :
bug.report(package='GEOquery')
8会话信息
以下包和版本用于制作此插图。
## R version 3.5.0 (2018-04-23)## Platform: x86_64-pc-linux-gnu (64-bit)## Running under: Ubuntu 16.04.4 LTS#### Matrix products: default## BLAS: /home/biocbuild/bbs-3.7-bioc/R/lib/libRblas.so## LAPACK: /home/biocbuild/bbs-3.7-bioc/R/lib/libRlapack.so#### locale:## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=C## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C## [9] LC_ADDRESS=C LC_TELEPHONE=C## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C#### attached base packages:## [1] parallel stats graphics grDevices utils datasets methods## [8] base#### other attached packages:## [1] GEOquery_2.48.0 Biobase_2.40.0 BiocGenerics_0.26.0## [4] knitr_1.20#### loaded via a namespace (and not attached):## [1] Rcpp_0.12.16 xml2_1.2.0 bindr_0.1.1 magrittr_1.5## [5] hms_0.4.2 R6_2.2.2 rlang_0.2.0 stringr_1.3.0## [9] dplyr_0.7.4 tools_3.5.0 htmltools_0.3.6 yaml_2.1.18## [13] rprojroot_1.3-2 digest_0.6.15 assertthat_0.2.0 tibble_1.4.2## [17] bindrcpp_0.2.2 purrr_0.2.4 tidyr_0.8.0 readr_1.1.1## [21] curl_3.2 glue_1.2.0 evaluate_0.10.1 rmarkdown_1.9## [25] limma_3.36.0 stringi_1.1.7 compiler_3.5.0 pillar_1.2.2## [29] backports_1.1.2 pkgconfig_2.0.1